深入浅出Node.js – 异步I/O

异步I/O
异步I/O与非阻塞I/O

从计算机内核I/O而言,同步/异步和阻塞/非阻塞是两个不同的概念。
操作系统内核对于I/O只有两种方式,阻塞和非阻塞。
阻塞I/O的特点是调用之后一定要等到系统内核层面完成所有操作后,调用才结束,阻塞I/O造成了CPU等待I/O,浪费了CPU的处理能力。非阻塞I/O与阻塞I/O的区别是调用之后会立即返回。
非阻塞I/O返回后,CPU可以用来处理其他事情,此时性能提升是明显的。非阻塞I/O返回时,并没有获取到完整的数据,应用程序需要重复调用I/O操作来确认是否完成,这种重复调用判断操作是否完成的技术叫做轮询。
阻塞I/O造成CPU等待浪费,非阻塞I/O需要轮询判断数据是否获取完毕,也会浪费CPU资源。
现存的轮询技术主要有:

read 它是最原始,性能最低的一种,通过重复调用来检查I/O的状态来完成数据的读取。在得到数据之前CPU一直耗在等待上。
select
poll
epoll
kqueue

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理