2013-07-09 109 views
6

Ben Noordhius在Node v0.10.0中所做的更改之一是在Unix中「尊重UV_THREADPOOL_SIZE環境變量」。 「threadpool.c」源文件似乎就是這麼做的。有沒有人試過使用UV_THREADPOOL_SIZE環境變量?

如果我不設置這個env變量,我可以驗證我僅限於4個線程的線程池,這是線程池的默認大小。

但我在我的Linux服務器上將此環境變量設置爲64,然後重新啓動節點,但我似乎仍然受到限制,看起來似乎是一個大小爲5的線程池?

這對任何人都有意義嗎?謝謝!

+0

如果你有超過[插入你的目標線程池的位置大小] CPU內核少,提防:http://stackoverflow.com/q/1718465/149444 –

+0

@RicardoStuven額外的線程超過1每個核心將仍然有助於節點,因爲libuv線程池通常只用於IO而不是用於計算。這是在[接受的答案](http://stackoverflow.com/a/1718522/675721)的第一行中解決的。 –

回答

7

看來您必須將其設置爲var with node命令或來自節點程序內部。執行它想:

UV_THREADPOOL_SIZE=64 node 

或程序修改:

process.env.UV_THREADPOOL_SIZE=64 
//then execute some function that requires threadpool 
require('fs').readFile('testing',function(){}); 

測試線程:

ps -Lef | grep "\<node\>" | wc -l 
67 
+0

當我向process.env添加UV_THREADPOOL_SIZE時,我只看到6個線程。你需要閱讀文件才能看到它嗎? – 4m1r

+0

@ 4m1r是的,已經提到過。 – user568109

+1

將'export UV_THREADPOOL_SIZE = 64'放在'.bashrc'或等價物中也會將其應用到在該shell下啓動的任何節點進程。 – DuBistKomisch