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 多路复用调用函数

Select:
linux内核提供的方法:
/* According

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

被折叠的 条评论
为什么被折叠?



