Node特点
- 异步IO
- 事件与回调函数
- 单线程
- 跨平台
单线程优势:
- 单线程的最大好处是不用像多线程编程那样处处在意状态的同步问题
- 没有死锁的存在
- 没有线程上下文交换所带来的性能上的开销
单线程劣势:
- 无法利用多核CPU
- 错误会引起整个应用退出,应用的健壮性值得考验
- 大量计算占用CPU导致无法继续调用异步I/O
Node采用了与Web Workers相同的思路来解决单线程中大计算量的问题:child_process。
子进程的出现,意味着Node可以从容地应对单线程在健壮性和无法利用多核CPU方面的问 题。通过将计算分发到各个子进程,可以将大量计算分解掉,然后再通过进程之间的事件消息来 传递结果,这可以很好地保持应用模型的简单和低依赖。通过Master-Worker的管理方式,也可以 很好地管理各个工作进程,以达到更高的健壮性。
Node应用场景
IO密集型
Node面向网络且擅长并行I/O,能够有效 地组织起更多的硬件资源,从而提供更多好的服务。I/O密集的优势主要在于Node利用事件循环的处理能力,而不是启动每一个线程为每一个请 求服务,资源占用极少。
CPU密集型解决方案
Node的异步I/O已经解决了在单线程上CPU与I/O之间阻塞无法重叠 利用的问题,Node虽然没有提供多线程用于计算支持,但是还是有以下两个方式来充分利 用CPU。
1.Node可以通过编写C/C++扩展的方式更高效地利用CPU
2.如果单线程的Node不能满足需求,甚至用了C/C++扩展后还觉得不够,那么通过子进程的方式,将一部分Node进程当做常驻服务进程用于计算,然后利用进程间的消息来传递结果,将计算与I/O分离,这样还能充分利用多CPU。
分布式应用
高效利用并行IO