Node:I/O异步的基本要素

Node.js:异步I/O的基本要素

1. 事件循环

Node的执行模型为事件循环,正是它使得回调函数十分普遍;

在每次进程启动时,Node就会创建一个无限循环,每执行一次循环称作Tick。每个Tick的过程就是查看是否还有待办事件,如果又,就调取其相关的回调函数;如果还存在相关联的回调函数,就执行他们;如果不再有事件处理,就退出事件循环。

2. 观察者模式

每个循环中又一个或多个观察者,判断是否有事件需要处理的过程就是观察者询问是否存在需要处理的事件。

事件循环是一个典型的生产者和消费者的关系。异步I/O、网络请求等是事件的生产者,源源不断地为Node提供不同类型的事件,这些事件被传入到观察者那边,事件循环从观察者那里取出事件并进行处理。

3. 请求对象

请求对象是异步I/O过程中的重要中间产物,所有的状态都保存在这个对象中,包括送入线程池等待执行以及I/O操作完毕后的回调处理。

4.执行回调

I/O观察者回调函数的行为就是取出请求对象的result属性作为参数,取出oncomplete_sym属性作为方法,然后调用执行,以此达到调用JavaScript中传入的回调函数的目的。


事件循环、观察者、请求对象、I/O线程池这思哲共同构成了Node的异步I/O模型的基本要素。

由于我们知道JavaScript是单线程的,所以按常识很容易理解为它不能充分利用多核CPU。事实上,在Node中,除了JavaScript是单线程外,Node自身其实是多线程的,只是I/O线程使用的CPU较少。

猜你喜欢

转载自blog.csdn.net/yivisir/article/details/107788688
今日推荐