我知道我們可以在運行相關進程之前通過設置UV_THREADPOOL_SIZE環境變量來控制libuv線程池大小。在運行時確定libuv線程池的大小?
但是,由於這可能會改變(取決於服務器配置),因此在運行時檢查libuv實際使用的線程池大小將會很好。我們應該怎麼做?
謝謝。
我知道我們可以在運行相關進程之前通過設置UV_THREADPOOL_SIZE環境變量來控制libuv線程池大小。在運行時確定libuv線程池的大小?
但是,由於這可能會改變(取決於服務器配置),因此在運行時檢查libuv實際使用的線程池大小將會很好。我們應該怎麼做?
謝謝。
線程池大小當前不能在運行時更改。第一次操作在池中排隊時,libuv將讀取UV_THREADPOOL_SIZE
環境變量並創建線程池。從那時起,它的大小不會改變。
我知道大小是固定的,但UV_THREADPOOL_SIZE只是一個環境變量,並且不是固定的。這個值可能已經改變得太晚了(例如,在操作在池中排隊之後)並且可能不會反映正在使用的實際線程池大小... – logidelic
好點。目前線程池是一個不向外部公開的實現細節(以env變量爲模),所以添加一個獲取其大小的方法不會對您有所幫助,因爲您無法對其進行更改或做任何事情。現在有一個(現在已經停滯)的計劃,轉而使用「彈性」線程池:https://github.com/libuv/libuv/issues/267,這將使這一指標更不相關。爲什麼你需要在運行時知道這一點? – saghul
我寫了一個C++節點模塊插件,可以由我無法控制的節點進程加載。如果在模塊中,我可以檢查libuv線程池的大小,以幫助決定如何最有效地運行,這將非常有用。我不能依賴UV_THREADPOOL_SIZE,因爲已知某些開發人員在其節點腳本中設置了此選項,但已爲時過晚而沒有任何效果。 – logidelic
線程池大小不會改變。如果您想要當前值,爲什麼不使用getenv或uv_os_getenv? – dlmeetei