• 我理解的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操作的状态,也不需要主动的去拷贝数据。

  • 相关阅读:
    网站添加手机短信功能
    FileWriter的正确使用,请及时关闭流
    myeclipse9.0没有提示
    Integer.getInteger,are you kinding me? 好吧, 我还是没怎么弄明白,求高人解答。。。
    构造方法充当临时对象&Calendar的使用
    关于Spring IOC的一点个人理解
    在JAVA中使用GUID
    动态生成table下的<tr>标签不显示
    MD5加密实例
    String,StringBuffer 和 StringBuilder 的区别
  • 原文地址:https://www.cnblogs.com/tmywu/p/3023533.html
Copyright © 2020-2023  润新知