老鸟:伸个懒腰,看着窗外明媚的阳光,喝一口绿茶,心情真好。没有什么比这更适合美好的一天了。老手:菜鸟,你消失半个月了,在忙什么?菜鸟:听说最近node很火,趁着年轻多囤点知识储备吧!老手:那说说你对node的理解?菜鸟:node的三大特点:单线程、事件驱动、非阻塞I/O...老手:说说单线程你懂吗?菜鸟:打个比方:皇帝处理朝政,不需要事事亲力亲为,而是要学会放权。朝廷大臣都向丞相汇报,丞相整理好后,再向皇上报告最后的方案。由皇帝决定。老手:你理解的很好,但是你有没有想过node是单线程的,怎么实现异步非阻塞I/O?Rookie:Node是事件驱动的。所有事件都形成一个队列并按顺序执行。老手:你说的对,Node支持多线程。当你使用MACactivitymonitor你会发现实际的进程数是6consthttp=require('http');http.createServer((req,res)=>{res.end('hello');}).listen(8000,()=>{console.log('服务器正在监听:'+8000);});菜鸟:是不是线程池的原因?老鸟:不错,你知道线程池吗?但是没有也没有。老手:首先,线程池是按需创建的。当加载文件IO时,通过ab模拟访问后,会发现线程数发生了变化。这是因为线程池中默认值为4。菜鸟:不是线程池吗?老手:你忽略了node集成了V8引擎?.Node.js启动后,会创建一个V8实例,V8实例是多线程的。菜鸟:想想……老手:不会随时阻塞主线程吧?Rookie:老手,经过你的分析,我不能肯定地回答老手:当然不是。主线程在某些情况下也会阻塞。Node.js事件循环中的一个阶段是轮询。轮询阶段在某些情况下会阻塞。老鸟:当然,不要丢人。知识是无止境的。我只是提醒你,你必须不断探索和质疑,才能不断求知。菜鸟:受教了,给大家点个赞,顺便收藏一下参考资料https://nodejs.org/en/docs/gu...
