IO多路复用模型

NIO的问题

上一节通过分析及测试BIO和NIO的原理与性能,虽然NIO胜过BIO,但是随着连接的增多,每次需要遍历的连接数增大,新建立连接的速度和IO读写的速度都在降低。随着历史长河的流动,IO多路复用模型被提出

BIO模型,Server端处理每一个新的连接需要抛出新线程

NIO模型,解决了多个线程的问题,可以在一个线程中处理多个连接,缺点在于每次遍历所有的连接,一个一个查看有没有数据到来,假设有10K个连接,实际有数据的只有10个,那9990次read是不必要的调用

IO多路复用模型_第1张图片

展望:如果应用程序只做一次系统调用就能知道哪些连接有数据的话,不就解决了9990次不必要的调用问题了么?

SELECT/POLL

应用程序只需要调用一次系统调用,就能知道所有fd的状态,APP知道哪些fd有数据之后,再逐个进行读写操作

IO多路复用模型_第2张图片

IO多路复用模型_第3张图片

你可能感兴趣的:(从Socket到Netty,内核,epoll,java,linux)