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