EventLoop和线程模型


一、线程池

1、基本线程池

描述:

1)从池中的空闲线程列表中选择一个Thread,并且指派它去运行一个已提交的任务(一个Runnable的实现);

2)当任务完成时,将该Thread返回给该列表,使其可被重用

问题:

虽然池化和重用线程相对于简单地为每个任务都创建和销毁线程都是一种进步,但是它并不能消除由上下文切换带来的开销,其将随着数量的增加很快变得明显,并且在高负载下越发严重。

2、Netty线程模型

Reactor模型:

维基百科解释:The reactor design pattern is an event handling pattern for handling service requests delivered concurrently by one or more inputs. The service handler then demultiplexes the incoming requests and dispatches them synchronously to associated request handlers.

Netty线程模型:

1.Selector

2.EventLoopGroup/EventLoop

3.ChannelPipeline

Selector

selector是java nio提供的SelectableChannel多路复用器,它维护这三个SelectionKey集合,负责配合selector操作将就绪的IO事件分离出来,表现为SelectionKey.在Netty线程模型,Selector充当着多路复用器的作用,而对于SelectionKey理解为Reactor中的资源。

EventLoop/EventLoopGroup

BossEventLoopGroup通常是一个单线程的EventLoop,EventLoop维护着一个注册了ServerSocketChannel的Selector实例,BossEventLoop不断轮询Selector将连接事件分离出来,通常是OP_ACCEPT事件,然后将accept得到的socketChannel交给WorkerEventLoopGroup,WorkerEventLoopGroup会由next选择其中一个EventLoopGroup来将这个SocketChannel注册到其维护的Selector并对其后续的IO事件进行处理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容