簡體   English   中英

Node.js 多線程:什么是工作線程,它是如何工作的?

[英]Node.js multithreading: What are Worker threads and how does it work?

我一直認為 JS 是一種單線程語言,這使得它對於 CPU 密集型任務效率低下。 我最近遇到了工作線程,以及它如何通過創建“一個進程下的多個工作線程”來解決這個效率低下的問題。 進程和線程有什么區別? 為什么 JS 突然能夠產生多個工作線程來幫助主 JS 線程並與之交互以實現並發? 你能幫我用外行的方式理解這個話題嗎? 謝謝

從節點 v10 開始,他們引入了 WorkerThreads。 WorkerThread 是 V8 Javascript 解釋器的全新實例。 它有自己的變量集、全局變量和運行 Javascript 的線程。 您不能在主線程和 workerThread 之間或 workerThread 之間直接共享常規 Javascript 變量。

如果 memory 被專門分配為 SharedMemory(例如SharedArrayBuffer ),則可以直接共享它,但是這樣做時,您將面臨兩個線程之間的競爭條件,這兩個線程都訪問共享 memory。 因此,在修改共享 memory 時,您必須使用 Atomics 或您自己的並發管理方案來防止競爭條件。

主線程和工作線程可以相互發送消息,這些消息可以包含某些類型的數據結構,這些數據結構將通過結構化克隆機制復制並發送到另一個 V8 實例。

workerThreads 背后的想法是,它們有助於將 CPU 密集型代碼從主事件循環中取出(對服務器特別有用),因此您可以啟動一個或多個 workerThreads 來處理 CPU 密集型工作並保持主線程事件循環空閑並響應傳入事件/網絡/等...

你也可以通過創建多個 nodejs 進程來做類似的事情。 但是,進程比 workerThread 更重,workerThreads 允許您與 SharedMemory 共享 memory,而單獨的進程則不能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM