js 创建多线程的方法 Worker

JavaScript013

js 创建多线程的方法 Worker,第1张

Worker 支持主流的浏览器 IE10 以下不支持

a.js 内容

var i =0

setInterval((function () {

postMessage(i++)

}),1000)

使用 postMessage 向主线程 传送消息

var worker =new Worker('a.js') // 写入需要引入的 js

console.log(worker)

worker.onmessage =function () {

console.log(event.data)

}

//用于关闭worker线程 

 worker.terminate()

JS是单线程语言,减少了线程间切换的开销,且不用考虑锁的问题,因此适合IO密集型项目。

JS的单线程,其实指的是js主引擎线程的。除此之外还有定时器线程、异步http线程(ajax)等,最终通过Event Loop协调执行。

为了充分利用多核CPU,可以使用 worker_threads 实现多线程, child_process 或 cluster 实现多进程(master-worker模式)。

不同于浏览器中的 web worker ,nodejs中通过 worker_threads 实现多线程。通常在计算密集型场景中,才需要使用NodeJs多线程,因此使用场景较少。

electron中即经常使用该模块。

cluster 封装了 child_process.fork ,并内置了负载均衡,可有效实现多进程。

搜索一下Concurrent.Thread,它是一个允许进行多线程编程的库。

其实都是使用settimeout之类的函数模拟出来的

例如:

settimeout(function1,1)

settimeout(function2,1)

settimeout(function3,1)

这样就相当于同时触发三个函数。如果这三个函数都是调用一段功能的代码,那就相当于同时执行三次,也就是三个线程。

JS本身是不支持多线程的。