【急】Node新手,这是我对Node执行顺序的理解,希望各位指正
第一个问题:Node的整体执行顺序是什么呢?
是这样么:
- 一开始从我们的code入口开始,以同步,顺序执行的方式执行我们的代码。
- 如果其中存在 I/O 则被放入 事件队列,I/O交给操作系统,执行完毕后,会把回调放入事件队列,Node继续执行我的主线程代码
- 然后我的代码被整个跑过一遍(不会阻塞等待IO),即凡是不涉及I/O的部分,被跑过一遍。
- 代码跑完后,余下的就是事件和事件回调的逻辑,于是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 学习了,十分感谢