我们现在知道, 当一个新的客户端连接到服务器时, 通过选择器EventExecutorChooser选择一个NioEventLoop为其服务. 那么其实最终是由NioEventLoop封装的Thread为其服务. 在前面我们也说过, 在创建NioEventLoop时会创建线程选择器ThreadPerTaskExecutor, 由这个选择器创建底层的线程.下面我们就来说说这个选择器.
executor = new ThreadPerTaskExecutor(newDefaultThreadFactory());
public ThreadPerTaskExecutor(ThreadFactory threadFactory) {
this.threadFactory = threadFactory;
}
@Override
public void execute(Runnable command) {
threadFactory.newThread(command).start();
}
我们先说一下这个ThreadFactory. 它的默认实现如下
public DefaultThreadFactory(String poolName, boolean daemon, int priority, ThreadGroup threadGroup) {
prefix = poolName + '-' + poolId.incrementAndGet() + '-';
this.daemon = daemon;
this.priority = priority;
this.threadGroup = threadGroup;
}
我们看到, prefix = nioEventLoop-1- 如果是第二个NioEventLoop, 那么它的名称就叫做nioEventLoop-2- 以此类推.而且daemon=false . 而且底层创建的线程并不是JDK的Thread类线程, 而是Netty自己设计的线程类, 叫做FastThreadLocalThread . 从名字上可以看得出来, 这个线程类比JDK的线程类性能要快, 实际的确快,
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。