node.js非阻塞型IO及事件环机制到底是咋一回事到底有啥优点

【node.js非阻塞型IO及事件环机制到底是咋一回事到底有啥优点】 看图,Node.js 使用的 libuv 只在右侧的场景需要动用线程池,里面多为阻塞 I/O 或者耗 CPU 的任务。非阻塞的尤其是网络 I/O, 是直接在主线程里进行的。
node.js非阻塞型IO及事件环机制到底是咋一回事到底有啥优点


■网友
本质上就是do( f , callback)等价于new thread(t)t =\u0026gt; {f();//此处是阻塞函数push to main event queue(callback)}
■网友
Apache是Web服务器,node只是后端服务器。应该是Apache和Nginx;node和php对比才有效。非阻塞io使用事件循环实现的。任何服务程序最终优化后都是用事件循环实现的。线程优先级完全不用自己操心,操作系统会做好的。php是阻塞io,他的处理线程只处理一个用户的请求。需要io的时候,处理线程完全停止运行用户代码,直接自己去调用内核io函数。结果就是被操作系统挂起等待io完成,操作系统自己去决定下一个运行哪个线程。(实际当然比这个复杂得多,而且也用了事件循环和多线程)nodejs是非阻塞io,处理线程要不断处理大量用户请求。处理线程要做的就是检查消息队列。如果有事件发生(io线程发来的、程序启动事件、等等),就调用回调。没有事件,就继续等。根据“别人比我好我就要虚心学习”的原则,同步和异步在io的上已经没有什么差异了。但由于核心思想不同,两个东西在编程和部署的时候差异巨大。php最大的毛病是每个请求都要重新初始化,而且系统不停切换线程消耗很大。而node最大的毛病是同一时刻只能处理一个请求,其他的只能排队不能实时伸缩,请求间有可能意外的互相影响,万一线程崩溃,所有队列里的请求全部出错。任何一个的缺点就是对方的优点。。。而且两者的缺点都可以通过各种方法避免。。。


    推荐阅读