zoukankan      html  css  js  c++  java
  • 深入浅出node读书笔记(三)

      介绍完了node的模块机制,现在来说说node的一个非常有名的特色:异步I/O.

      (1)首先我们先要了解一下node自身的执行模型:事件循环.它使得回调函数十分普遍。在启动进程的时候,node创建一个类似于while(true)循环的循环体,每执行一次循环体我们成为一次tick。每个tick的过程就是查看是否有事件需要处理,如果有就看它是否有关联的回调函数,如果有,就执行回调函数,没有就进入下一个循环。直到没有事件为止,就退出流程。

                                      

          此外,每个事件循环均有一个或者多个观察者,node可向其询问是否有事件需要处理。

      (2)node的事件的请求对象:

       如上图所示,在JavaScript发送异步请求后,创建了一个请求对象,从js层传过来的参数和相关方法(包括回调函数)都被封装到了这个对象里面,对象包装完毕后放入线程池等待执行。如果线程池里面有线程可用,即可执行请求对象中的I/O操作,并将执行完的结果放到请求对象中,通知IOCP调用完成,然后回到node的事件循环里面,等待回调函数执行。

      (3)非I/O的异步api:setTimeout(),setInterval(),setImmediate(),process.nextTick()

        ①setTimeout()与setInterval():调用这两个函数创建的定时器会被插入到定时器观察者内部的一个红黑树中,每次tick执行时候都会从红黑树中迭代取出定时器对象。

        ②process.nextTick():将回调函数延迟至下一次tick执行,不需要调用红黑树以及迭代过程,效率较高。

        ③setImmediate():将回调函数放到下一次tick执行。

      总结:但与process.nextTick()有区别。②的优先级高于③,因为二者所属的观察者不同。同时在具体表现上,如果多次调用对应函数,②的回调函数放在了一个数组中,下次tick全部执行一遍,而③的回调函数放在一个链               表中,每次只能执行一个。

  • 相关阅读:
    觉察——似非而是的隽语
    蔡志忠:带你看宇宙 颠覆你想象!
    宏图:肯恩·威尔伯眼中的法界|《野兽爱智慧》
    《平常禅》的启示:在平凡生活中活出真实的自己|心灵自由写作群·文选
    我们如何从高纬度世界吸取能量?
    刘希彦·到底该如何进补
    胡因梦|修道上的物化倾向
    【宗萨仁波切】精进,并不表示你要多念经、多念咒!
    Mysql:Authentication Plugins:插件式(权限)认证
    Mysql:通过SSH隧道方式实现安全通讯
  • 原文地址:https://www.cnblogs.com/jakii/p/5117414.html
Copyright © 2011-2022 走看看