标签:fun 开发 多线程 单点 作者 最大 渲染 大量 engine
Node保持了JavaScript在浏览器中单线程的特点。而且在Node中,JavaScript 与其余线程是无法共享任何状态的。单线程的最大好处是不用像多线程编程那样处处在意状态的同步问题,这里没有死锁的存在,也没有线程上下文交换所带来的性能上的开销。
同样,单线程也有它自身的弱点,这些弱点是学习Node的过程中必须要面对的。积极面对这些弱点,可以享受到Node带来的好处,也能避免潜在的问题,使其得以高效利用。单线程的弱点具体有以下3方面。
像浏览器中JavaScript与UI共用一个线程- -样, JavaScript长时间执行会导致U1的渲染和响应被中断。在Node中,长时间的CPU占用也会导致后续的异步I/O发不出调用,已完成的异步I/O的回调函数也会得不到及时执行。
Node采用了与Web Workers相同的思路来解决单线程中大计算量的问题: child_ process。子进程的出现,意味着Node可以从容地应对单线程在健壮性和无法利用多核CPU方面的问题。通过将计算分发到各个子进程,可以将大量计算分解掉,然后再通过进程之间的事件消息来传递结果,这可以很好地保持应用模型的简单和低依赖。通过Master-Worker的管理方式,也可以很好地管理各个工作进程,以达到更高的健壮性。
I/O密集型和CPU密集型
Node面向网络且擅长并行I/O,能够有效地组织起更多的硬件资源,从而提供更多更好的服务。
I/O密集的优势主要在于利用事件循环的处理能力,而不是启动每一个线程为每一个请求服务,资源占用极少。
换一个角度,在CPU密集的应用场景中,Node是否能胜任呢?实际上,V8的执行效率是分高的。单以执行效率来做评判,V8的执行效率是毋庸置疑的。
标签:fun 开发 多线程 单点 作者 最大 渲染 大量 engine
原文地址:https://www.cnblogs.com/Heiofungming/p/13193521.html