前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NioEventLoop 是一个线程的线程池

NioEventLoop 是一个线程的线程池

原创
作者头像
乐事
修改2020-05-11 10:52:09
8300
修改2020-05-11 10:52:09
举报
文章被收录于专栏:日常笔记日常笔记

我们现在知道, 当一个新的客户端连接到服务器时, 通过选择器EventExecutorChooser选择一个NioEventLoop为其服务. 那么其实最终是由NioEventLoop封装的Thread为其服务. 在前面我们也说过, 在创建NioEventLoop时会创建线程选择器ThreadPerTaskExecutor, 由这个选择器创建底层的线程.下面我们就来说说这个选择器.

代码语言:javascript
复制
executor = new ThreadPerTaskExecutor(newDefaultThreadFactory());
?
public ThreadPerTaskExecutor(ThreadFactory threadFactory) {
    this.threadFactory = threadFactory;
}
@Override
public void execute(Runnable command) {
    threadFactory.newThread(command).start();
}

我们先说一下这个ThreadFactory. 它的默认实现如下

代码语言:javascript
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com