搜尋
首頁web前端js教程淺析Node.js使用worker_threads多執行緒進行平行處理

淺析Node.js使用worker_threads多執行緒進行平行處理

Mar 17, 2022 pm 07:58 PM
node.js多執行緒平行處理

如何使用 Node.js 進行平行處理?以下這篇文章就來跟大家介紹一下使用 Node 多執行緒進行平行處理的方法,希望對大家有幫助!

淺析Node.js使用worker_threads多執行緒進行平行處理

很多人似乎都無法理解單執行緒 NodeJS 是如何與多執行緒後端競爭的。

要找出原因,我們必須了解 Nodejs 是單執行緒的真正意義。

JavaScript 本身最初是為了做一些簡單的事情而創建的,例如驗證表單、做出回應等,直到2009 年,Node.js 的創建者Ryan Dahl 才使使用JavaScript 編寫伺服器端程式碼成為可能。

支援多執行緒的伺服器端語言具有各種結構和構造,用於在執行緒和其他面向執行緒的特性之間同步。

支援這些東西意味著 JavaScript 需要改變整個語言,而這也違背了javascript締造者的想法。因此,為了讓純 JavaScript 支援多線程,Dahl 必須創建解決方法。讓我們來看看吧!


Node.js 是如何運作的?

Node.js 使用兩個執行緒:由事件循環處理的主執行緒和工作執行緒池的幾個輔助執行緒。

事件循環Node.js 處理非阻塞I/O 操作的機制-儘管JavaScript 是單執行緒處理的-當有可能的時候,它們會將操作轉移到系統內核中去。當 JavaScript 操作阻塞執行緒時,事件循環也被阻塞。

工作池是一種執行模型,它產生和處理單獨的線程,然後同步執行任務並將結果傳回給事件循環。然後事件循環使用所述結果執行提供的回調。

基本上,工作池處理非同步 I/O 操作-主要是與系統磁碟和網路的交互作用。有些模組使用開箱即用的工作池,例如 fs(I/O-heavy)或 crypto(CPU-heavy)。工作池是在 libuv 中實現的,當 Node 需要在 JavaScript 和 C 之間內部傳輸資料時,這會導致輕微的延遲,但幾乎可以忽略。

了解事件循環和工作池的意義之後 我們看下下面程式碼:

淺析Node.js使用worker_threads多執行緒進行平行處理

在上面的程式碼中,我們不必同步等待事件。我們將讀取文件的任務委託給工作池,並使用結果呼叫提供的函數。由於工作池有自己的線程,因此事件循環可以在讀取文件的同時繼續正常執行。


跟大家介紹:worker_threads

隨著 Node.js 10.5.0 的發布,出現了 worker_threads。它支援在 JavaScript 中建立簡單的多執行緒應用程式

worker_threads 是一個nodejs模組包。線程工作者是在單獨線程中產生的一段程式碼(通常從文件中取出)。

要注意的是,術語執行緒工作者、工作者和執行緒通常可以互換使用。它們都指的是同一件事。

淺析Node.js使用worker_threads多執行緒進行平行處理

Node.js 中的工作執行緒對於執行繁重的 JavaScript 任務很有用。在執行緒的幫助下,Worker 可以輕鬆地並行運行 JavaScript 程式碼,從而使其更快、更有效率。我們可以在不干擾主執行緒的情況下完成繁重的任務。

舊版的 Node.js 中沒有引入工作執行緒。因此,首先更新您的 Node.js 以開始使用。

現在建立兩個檔案來實作線程,如下所示:

檔名:worker.js

const { workerData, parentPort } = require('worker_threads');

console.log(`Write-up on how ${workerData} wants to chill with the big boys`);

parentPort.postMessage({ filename: workerData, status: 'Done' });

檔名: index.js

const { Worker } = require('worker_threads');

const runSerice = (workerData) => {
  return new Promise((resolve, reject) => {
    const worker = new Worker('./worker.js', { workerData });
    worker.on('message', resolve);
    worker.on('error', reject);
    worker.on('exit', (code) => {
      if (code !== 0)
        reject(new Error(`Worker Thread stopped with exit code ${code}`));
    });
  });
};
const run = async () => {
  const result = await runSerice('Tunde Ednut');
  console.log(result);
};

run().catch((err) => console.error(err));

輸出:

淺析Node.js使用worker_threads多執行緒進行平行處理

#更多node相關知識,請造訪:nodejs 教學課程

以上是淺析Node.js使用worker_threads多執行緒進行平行處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:掘金社区。如有侵權,請聯絡admin@php.cn刪除
Python vs. JavaScript:性能和效率注意事項Python vs. JavaScript:性能和效率注意事項Apr 30, 2025 am 12:08 AM

Python和JavaScript在性能和效率方面的差異主要體現在:1)Python作為解釋型語言,運行速度較慢,但開發效率高,適合快速原型開發;2)JavaScript在瀏覽器中受限於單線程,但在Node.js中可利用多線程和異步I/O提升性能,兩者在實際項目中各有優勢。

JavaScript的起源:探索其實施語言JavaScript的起源:探索其實施語言Apr 29, 2025 am 12:51 AM

JavaScript起源於1995年,由布蘭登·艾克創造,實現語言為C語言。 1.C語言為JavaScript提供了高性能和系統級編程能力。 2.JavaScript的內存管理和性能優化依賴於C語言。 3.C語言的跨平台特性幫助JavaScript在不同操作系統上高效運行。

幕後:什麼語言能力JavaScript?幕後:什麼語言能力JavaScript?Apr 28, 2025 am 12:01 AM

JavaScript在瀏覽器和Node.js環境中運行,依賴JavaScript引擎解析和執行代碼。 1)解析階段生成抽象語法樹(AST);2)編譯階段將AST轉換為字節碼或機器碼;3)執行階段執行編譯後的代碼。

Python和JavaScript的未來:趨勢和預測Python和JavaScript的未來:趨勢和預測Apr 27, 2025 am 12:21 AM

Python和JavaScript的未來趨勢包括:1.Python將鞏固在科學計算和AI領域的地位,2.JavaScript將推動Web技術發展,3.跨平台開發將成為熱門,4.性能優化將是重點。兩者都將繼續在各自領域擴展應用場景,並在性能上有更多突破。

Python vs. JavaScript:開發環境和工具Python vs. JavaScript:開發環境和工具Apr 26, 2025 am 12:09 AM

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。

JavaScript是用C編寫的嗎?檢查證據JavaScript是用C編寫的嗎?檢查證據Apr 25, 2025 am 12:15 AM

是的,JavaScript的引擎核心是用C語言編寫的。 1)C語言提供了高效性能和底層控制,適合JavaScript引擎的開發。 2)以V8引擎為例,其核心用C 編寫,結合了C的效率和麵向對象特性。 3)JavaScript引擎的工作原理包括解析、編譯和執行,C語言在這些過程中發揮關鍵作用。

JavaScript的角色:使網絡交互和動態JavaScript的角色:使網絡交互和動態Apr 24, 2025 am 12:12 AM

JavaScript是現代網站的核心,因為它增強了網頁的交互性和動態性。 1)它允許在不刷新頁面的情況下改變內容,2)通過DOMAPI操作網頁,3)支持複雜的交互效果如動畫和拖放,4)優化性能和最佳實踐提高用戶體驗。

C和JavaScript:連接解釋C和JavaScript:連接解釋Apr 23, 2025 am 12:07 AM

C 和JavaScript通過WebAssembly實現互操作性。 1)C 代碼編譯成WebAssembly模塊,引入到JavaScript環境中,增強計算能力。 2)在遊戲開發中,C 處理物理引擎和圖形渲染,JavaScript負責遊戲邏輯和用戶界面。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。