我理解的Node.js(二)--IO操作

  上文发布后 Link:http://www.cnblogs.com/tmywu/archive/2013/04/13/3017888.html#2657529

,引起了对Node.js内部实现Event loop驱动方式的研究,除了异步I/O操作,本文对同步I/O操作的几种形式进行讲解:

  • 阻塞IO 
  • 非阻塞IO 
  • IO复用
  • 信号驱动IO 
  • 异步IO

1.阻塞IO 

                  图1

 从图1我们看到一个最简单的IO操作的流程,从通知内核准备数据阶段到数据从内核Copy到用户空间两个过程都是阻塞的。

2.非阻塞IO

                    图2

在应用进程在内核数据准备阶段不断接受轮询,直到数据准备完毕。数据从内核Copy到用户空间这个阶段I/O操作还是阻塞的。

3.I/O复用

                    图3

在内核数据准备(I)阶段,当一个或者多个IO准备就绪时,通知程序,数据从内核Copy到用户空间阶段还是阻塞的,在第I阶段还是轮询实现的,只是所有的IO都集中在一个地方,这个地方进行轮询。同时阻塞多个I/O操作,而且可以同时对多个读操作,多个写操作的I/O函数进行检测,直到有数据可读或可写时,才真正调用I/O操作函数。

4.信号驱动IO

                  图4

当内核数据准备阶段数据准备完毕的时候,信号通知程序数据准备完毕,数据从内核Copy到用户空间阶段阻塞。

5.异步IO

                  图5

发出系统调用后,直接返回。通知IO操作完成。


前四种IO操作都属于同步IO操作,最后一种异步IO。二者区别:同步IO在内核Copy到用户控件阶段必须要求进程主动调用recvfrom.而异步IO则将IO操作全部交给内核完成,完成后发信号通知。此期间,用户不需要去检查IO操作的状态,也不需要主动的去拷贝数据。

 

posted @ 2013-04-16 11:22  老鱼_678  阅读(1402)  评论(1编辑  收藏  举报