NIO多路复用以及select/poll/epoll

本文介绍了IO多路复用机制,用于提升并发吞吐量,常见于netty和kafka等中间件。NIO避免了BIO的阻塞问题,但高并发下需要遍历所有连接。NIO多路复用通过select、poll、epoll等方式优化,其中epoll利用内核反射模式提高效率,但在所有Socket活跃时可能存在资源竞争问题。
摘要由CSDN通过智能技术生成

IO多路复用机制:程序注册一组socket文件描述符给操作系统,监视这些fd是否有IO事件发生,有了就告诉程序处理。是一种触发式、批量式的解决方案。现在主流的中间件:netty、kafka都是采用的多路复用技术,来提升并发吞吐量

 

首先我们先了解BIO

当用read去读取网络的数据时,是无法预知对方是否已经发送数据的。因此在收到数据之前,能做的只有等待,直到对方把数据发过来,或者等到网络超时。

对于单线程的网络服务,这样做就会有卡死的问题。因为当等待时,整个线程会被挂起,无法执行,也无法做其他的工作。

 

NIO

在NIO模式下,调用read,如果发现没数据已经到达,就会立刻返回-1, 不会阻塞线程。NIO是现在主流的一种异步IO解决方案,但是使用NIO还是会存在问题,就是需要去一个个遍历所有的IO连接,是否有新的事件产生,在高并发时场景下,效率低下。这时NIO多路复用就应然产生了。

 

NIO多路复用

NIO多路复用,I/O就是指的我们网络I/O,多路指多个TCP连接(或多个Channel),复用指复用一个或少量线程。串起来理解就是很多个网络I/O复用一个或少量的线程来处理这些连接

首先需要了解linux系统内核提供的IO 多路复用调用函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值