Skip to content
On this page

前端多线程

浏览器端: HTML5 制定了 Web Worker 标准(Web Worker 的作用,就是为 JavaScript 创造多线程环境,允许主线程创建 Worker 线程,将一些任务分配给后者运行)。

nodejs多线程

cluster、child_process、worker_threads

Node.js 通过提供 cluster、child_process API 创建子进程的方式来赋予Node.js “多线程”能力。

但是这种创建进程的方式会牺牲共享内存,并且数据通信必须通过json进行传输。(有一定的局限性和性能问题)

基于此 Node.js V10.5.0 提供了 worker_threads,它比 child_process 或 cluster更轻量级。 与child_process 或 cluster 不同,worker_threads 可以共享内存,通过传输 ArrayBuffer 实例或共享 SharedArrayBuffer 实例来实现

Node.js 并没有其它支持多线的程语言(如:java),诸如"synchronized"之类的关键字来实现线程同步的概念。Node.js的 worker_threads 区别于它们的多线程。

如果添加线程,语言本身的性质将发生变化,所以不能将线程作为一组新的可用类或函数添加。

我们可以将其理解为:JavaScript和Node.js永远不会有线程,只有基于Node.js 架构的多工作线程

Node端:采用了和 Web Worker相同的思路来解决单线程中大量计算问题 ,官方提供了 child_process 模块和 cluster 模块, cluster 底层是基于child_process实现。

child_process、cluster都是用于创建子进程,然后子进程间通过事件消息来传递结果,这个可以很好地保持应用模型的简单和低依赖。从而解决无法利用多核 CPU 和程序健壮性问题。

Node V10.5.0: 提供了实验性质的 worker_threads模块,才让Node拥有了多工作线程。

Node V12.0.0:worker_threads 已经成为正式标准,可以在生产环境放心使用。

Released under the MIT License.