簡體   English   中英

Node.js 如何在有限的資源系統上調度 Worker

[英]How does Node.js schedule Workers on a limited resource system

我想知道如何充分利用 nodejs 的worker_threads中的 Worker 類,特別是在 1 或 2 個 cpu 系統上,是否比我剛剛在常規 nodejs 程序中阻塞在 for 循環中更好地安排任務(不使用任何工人 api)? 他們只是委托給操作系統嗎?

另外,我可以阻止 Worker 內部嗎? 我以為這就是他們的目的。

Node.js 如何在有限的資源系統上調度 Worker

Nodejs 工作線程使用底層操作系統線程,因此工作線程由操作系統調度,而不是由 nodejs 調度。 如果您的活動線程數多於 CPU 內核數,那么底層操作系統將在活動線程之間對內核進行時間切片(例如共享)。 一般來說,您不應該在主 nodejs 事件循環線程中編寫阻塞的 for 循環,但是對於問題的那部分的更多細節,我們需要查看您正在談論的實際代碼,確切的上下文是什么以及替代方案是什么。

另外,我可以阻止 Worker 內部嗎? 我以為這就是他們的目的。

是的你可以。 它不會對主事件循環線程產生任何不利影響。 當然,當工作線程被阻塞時,您將無法在工作線程中執行任何其他操作。 此外,您可能想知道 nodejs 中的工作線程不是輕量級的東西(就內存使用而言)。 每個都帶有一個單獨的 V8 解釋器環境。 因此,在低資源系統中,您必須非常仔細地計划內存使用量,因為 nodejs + 多個工作線程不會導致內存使用量低。

請記住,每個 V8 解釋器實例還為 libuv 引擎創建了自己的線程池,用於加密操作和文件操作等操作,以允許阻塞 OS 系統調用向 JS 引擎提供異步接口。 所以,除了你的 Javascript 線程之外,還有一些 nodejs API 中涉及到這些 libuv 線程。

暫無
暫無

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

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