《深入浅出nodejs》异步i/o笔记(1)

来源:互联网 发布:满族饮食 知乎 编辑:程序博客网 时间:2024/05/20 08:43
阻塞I/O:
    调用之后一定要等到系统内核层面完成所有的操作,调用才会结束。
    eg: 读取文件----
            内核在完成磁道寻盘、读取数据、复制数据到内存之后,调用才算结束。
非阻塞I/O:
    调用之后立即返回。

① 操作系统将所有的输入输出设备抽象为文件。
② 进行文件操作时,通过文件描述符进行管理,文件描述符类似于应用程序与系统内核之间的凭证。
③ 过程:
    A:I/O调用----打开文件描述符
    B:文件描述符实现文件的数据读写
             非阻塞: 不带数据直接返回,通过文件描述符才能再次读取数据
             阻塞:   完成整个获取数据过程。
    C:非阻塞返回之后,CPU时间片继续完成其他事务。
        返回当前调用的状态。
        
    (非阻塞)
    D: 通过轮询重复调用I/O操作确认完成获取完整数据
            ps:轮询
                read
                select  (1024长度)
                poll    (链表存储,避免数组长度的限制)
                epoll   (linux I/O通知效率最高机制)
                         轮询没有检查到事件,进入休眠
                         事件发生唤醒休眠
                kqueue   FreeBSD系统下存在
    
    我之前一直觉得非阻塞和异步是一样的,但是书上说不一样。但是也没有给我准确的解释,看完了这一章,我有点明白了,但是还是有些说不清楚。所以我又去百度了一下同步和异步。
    异步Asynchronous: 无需等待调用函数方法/对象的返回值就返回继续执行其他事务

    同步Synchronous : 与异步相反

    想了想,我觉得异步比较宏观,对于系统来说,调用了这个方法,但是直接就可以返回算是异步,比较像一个概括者说需要异步

                              非阻塞就比较细节,对于系统内核来说,如果一次性将I/O文件读取完毕就用到了阻塞,比如上面提到的那样。

     有想法请和我交流~ 谢谢。

0 0
原创粉丝点击