高机能IO模型浅析
}
(1)同步壅塞IO(Blocking IO):即传统的IO模型。
(2)同步非浊宣IO(Non-blocking IO):默认创建的socket都是浊宣的,非浊宣IO请求socket被设置为NONBLOCK。留意这里所说的NIO并非Java的NIO(New IO)库。
(3)IO多路复竽暌姑(IO Multiplexing):即经典的Reactor设计模式,有时也称为异步壅塞IO,Java中的Selector和Linux中的epoll都是这种模型。
(4)异步IO(Asynchronous IO):即经典的Proactor设计模式,也称为异步非浊宣IO。
同步和异步的概念描述的是用户线程与内核的交互方法:同步是指用户线程提议IO请求后须要等待或者轮询内核IO操作完成后才能持续履行;而异步是指用户线程提议IO请求后仍持续履行,当内核IO操作完成后会通知用户线程,或者调用用户线程注册的回调函数。
壅塞和非浊宣的概念描述的是用户线程调用内核IO操作的方法:壅塞是指IO操作须要彻底完成后才返回到用户空间;而非浊宣是指IO操作被调用后急速返回给用户一个状况值,无需比及IO操作彻底完成。
别的,Richard Stevens 在《Unix 收集编程》卷1中提到的基于旌旗灯号驱动的IO(Signal Driven IO)模型,因为该模型并不常用,本文不作涉及。接下来,我们具体分析四种常见的IO模型的实现道理。为了便利描述,我们同一应用IO的读操作作为示例。
一、同步壅塞IO
同步壅塞IO模型是最简单的IO模型,用户线程在内核进行IO操作时被壅塞。

如图1所示,用户线程经由过程体系调用read提议IO读操作,由用户空间转到内核空间。内核比及数据包达到后,然后将接收的数据拷贝到用户空间,完成read操作。
用户线程应用同步壅塞IO模型的伪代码描述为:
{
read(socket, buffer);
}
二、同步非浊宣IO
同步非浊宣IO是在同步壅塞IO的基本上,将socket设置为NONBLOCK。如许做用户线程可以在提议IO请求后可以急速返回。

如图2所示,因为socket长短浊宣的方法,是以用户线程提议IO请求时急速返回。但并未攫取到任何数据,用户线程须要赓续地提议IO请求,直到数据达到后,才真正攫取到数据,持续履行。
用户线程应用同步非浊宣IO模型的伪代码描述为:
{
while(read(socket, buffer) != SUCCESS)
;
process(buffer)
推荐阅读
引言先坦白地说,有一段时光我无法真正懂得深度进修。我查看相干研究论文和文┞仿,感到深度进修异常复杂。我测验测验去懂得神经收集及其变体,但依然认为艰苦。接着有一天,我决定一步一>>>详细阅读 本文标题:高性能IO模型浅析 地址:http://www.17bianji.com/lsqh/36095.html 1/2 1

网友点评
精彩导读
科技快报
品牌展示