Node.js是單線程的。 Javascript V8引擎和一些內部庫是多線程的。對於I/O,節點將I/O委託給可能是多線程的OS。節點爲單線程時,爲什麼我們需要node.js中的連接池?
如果我的Node.js應用程序連接到Redis的,或者SQL/MariaDB的服務器,我想我不應該需要的Redis或MySQL連接池。
作爲開發人員,我創造1個Redis的或MySQL連接並複用它來發送/獲取數據。當數據到達時,節點將調用回調來處理數據。
我明白連接與Java/.NET池,但他們是多線程的,所以用Java/.NET連接池有明顯的好處。
我的問題是:爲什麼我們需要在node.js的連接池時,節點是單線程的?它有什麼好處嗎?如果開發人員不這樣做,節點是否不利用底層操作系統和JavaScript引擎的多線程功能?
感謝
謝謝你的評論和鏈接。那麼使用redis連接池或mysql連接池會有什麼好處,因爲節點將使用其內部線程池進行I/O操作? – Avneet
當然,這些連接池仍然讓你有正在爲等待新的連接被打開頭頂的共享和可代替多個連接。這是正確實施時的優化。 – peteb
@Avneet也從Redis的和mysql的線程池,仍在與libuv就像你的代碼運行。所以沒有一個由這些軟件包創建的獨立池。你的代碼是用這些包實現的,你的代碼是單線程運行的,這些池只是提供開放的連接,只是等待工作。無需等待連接打開。 – peteb