详解netty 线程模型及`EventLoop`

本文深入探讨了Netty的线程模型,包括单线程、多线程和主从多线程模型,以及EventLoop如何高效处理I/O事件。对比了apache、TPC、select、poll和epoll模型,阐述了Netty线程模型的优势。

详解netty 线程模型及EventLoop

一、线程模型

linux下网络并发线程模型主要有下面五种

1、apache模型:

为每一种连接分配一个进程。主机分配给每个连接的时间和空间代价大,并且随着连接的增多,进程间切换开销也增长了,很难应对大量的客户并发连接。

2、TPC模型(Thread per connection):

每个线程对应一个连接。比apache模型好,但是还是存在性能开销大的问题。

3、select模型:I/O多路复用

1、每个连接对应一个文件描述符。select模型受限域FD_SETSIZE 即进程最大打开的描述符数。一般为1024个

2、select 每次都会扫描一个文件描述符的集合,集合越大扫描的效率越低。

3、内核到用户空间,会发生文件的拷贝

4、poll模型:I/O多路复用

1、poll模型解决了最大文件描述符的问题,但是依然存在扫描效率和内存拷贝的问题

5、epoll模型:I/O多路复用

1、无文件描述符大小的限制仅与内存大小相关

2、epoll返回时已经明确直到时哪个socket 已经有准备好的读写事件,避免了像select模型那样的扫描问题

3、内核到用户空间采用共享内存方式,实现了零拷贝

二、netty的线程模型

netty可以支持单线程、多线程、主从多线程模型。

  • reactor单线程模型的示意图如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值