[Javascript] 多執行緒: Worker Threads

Worker threads

https://nodejs.org/api/worker_threads.html


Understanding Worker Threads in Node.js

https://vagrantpi.github.io/2019/11/01/understanding-worker-threads-in-Node.js/


Node.js 併發能力總結

https://mp.weixin.qq.com/s?__biz=Mzg2ODQ1OTExOA==&mid=2247486251&idx=1&sn=8eefa78337d0fc2894ef1be14019b7be


Node.js 使用 Worker threads 時,會建立新的 threads 並將 Node.js instances 跑在裡面。Worker Threads 裡面可用:

1. ArrayBuffers 可以在 threads 間傳遞記憶體空間

2. SharedArrayBuffer 可以無障礙的在 threads 間分享記憶體(只能是 binary data)

3. Atomics 允許你在多線程中安全的使用變數

4. MessagePort asynchronous 的通訊端,用於不同 threads 間傳遞的資料用

5. MessageChannel 可以在兩個 threads 間 asynchronous 的傳遞資料

6. WorkerData 傳遞的資料型態,為任意 Javascript 資料型態


可用的API:

1. const { worker, parentPort } = require(‘worker_threads’) => worker 代表獨立的 thread、parentPort 則是 instance 的 port

2. new Worker(filename) or new Worker(code, { eval: true }) => 兩種啟動 worker 的方法(傳送 filename 或要執行的 code),建議在 production 使用 filename

3. worker.on(‘message’), worker/postMessage(data) => listening message 並將它傳到其他 threads

4. parentPort.on(‘message’), parentPort.postMessage(data) => parentPort.postMessage 傳送資料,父 thread 使用 worker.on('message') 取得資料。父 thread 使用 worker.postMessage() 傳送資料,parentPort.on('message')取得資料。



#thread, worker, 多執行緒, 平行, 運算


留言