• Node的异步I/O


    node是单线程非阻塞异步I/O的模式。

    • 阻塞I/O:完成整个数据获取的过程;
    • 非阻塞I/O:不带数据,直接立即返回,要获取数据,还需通过文件描述符再次读取。

    node完成整个异步I/O的有事件循环、观察者、请求对象、执行回调;

    • 事件循环:这是node自身的执行模式。在进程启动时,node会创建一个循环,每执行一次循环就会查看是否有事件处理,有,就取出事件及相关的回调函数。如果存在关联的回调函数,就执行他们,然后进入下一个循环,如果不在有事件处理就退出循环。

    • 观察者:浏览器在解析页面时,有些事件可能是来自用户的点击或者加载某些文件是产生,而这些产生的事件都是相应的观察者,当我们在执行一个node进程的时候,每一个事件循环都有一个或多个观察者,而判断是否有事件要处理的过程就是向这些观察者询问是否有要处理的事件。

    • 请求对象:我们在进行异步调用的时候就会封装一个请求对象,用于放入I/O线程池等待执行,已完成整个异步I/O的I/O操作。

    • 执行回调:组装好请求对象,然后总入I/O线程池等待执行,实际上是完成了异步I/O的第一部分,回调执行时第二部分。在每次事件循环执行中,他调用的请求对象都会加入到I/O观察者的队列,然后将其当做事件处理。

    • 整个异步I/O的流程图:

    • 总结
      异步调用——(请求对象)——>I/O线程池——(观察者)——>事件循环。

  • 相关阅读:
    nodejs发送http请求
    Codeforces Round #655 (Div. 2)
    闇の連鎖 树上LCA + 树上差分
    Tree 换根dp
    「水」悠悠碧波 kmp
    HH的项链
    Educational Codeforces Round 90 (Rated for Div. 2)
    巡逻(论为什么第二次求直径要用dp)
    Codeforces Round #651 (Div. 2)
    Treap板子
  • 原文地址:https://www.cnblogs.com/yehui-mmd/p/7413852.html
Copyright © 2020-2023  润新知