【急】Node新手,这是我对Node执行顺序的理解,希望各位指正
发布于 6 年前 作者 Mark24Code 4217 次浏览 来自 问答

第一个问题:Node的整体执行顺序是什么呢?

是这样么:

  1. 一开始从我们的code入口开始,以同步,顺序执行的方式执行我们的代码。
  2. 如果其中存在 I/O 则被放入 事件队列,I/O交给操作系统,执行完毕后,会把回调放入事件队列,Node继续执行我的主线程代码
  3. 然后我的代码被整个跑过一遍(不会阻塞等待IO),即凡是不涉及I/O的部分,被跑过一遍。
  4. 代码跑完后,余下的就是事件和事件回调的逻辑,于是Node事件循环(Event Loop)不断的检查队列中的事件,如果检测到,则交给主线程运行其回调的逻辑。

总结: 密集的I/O会交给别的线程独立负责,但是如果主线程中出现特别耗时的执行,那么就会耽搁队列中事件的执行(这个模型决定的),但是整体上,CPU利用率增高了,内存的开销减少了(相比传统多线程,还是这个模型决定的),由于减少了线程创立,上下文切换,所有Node的资源占用少,CPU使用率高也就是性能高。所以Node如果用来做以JSON数据交换为主,接受密集网络请求的服务器(比如:社交网站的手机m站)性能会很好。密集计算不适合Node。

其实上面的流程,也就是我对:

“Everything runs in parallel except your code! (在Node中)除了你的代码,一切都是并行的!”

这句话的理解。


我的理解对么? 请各位大神指正

8 回复

一开始先写点代码,太早磨这些概念不建议

实际上,放入事件队列的不仅仅是I/O操作,回调的部分都会放入事件队列

@jingsam 对的,3Q~

我的理解是从入口文件开始 单线程 cpu操作阻塞 io操作通知v8 然后让v8在外面弄好了 通知回调处理

talk is cheap, show me the code

@jingsam (异步的)回调部分

请比较:

function(callback) {
    callback();
}

function(callback) {
    process.nextTick(callback);
}

@jincdream 学习了,十分感谢

回到顶部