問題一、nodejs既然是單線程運行,在連接數據庫時為何要使用連接池呢?
問題二,redis服務端是單線程運行的,使用連接池到redis,服務端還是串行處理,有什么意義么?
這兩個問題都涉及到單線程與連接池,仔細想像這兩個問題其實回答是一樣的:
關鍵點是:網絡傳輸消耗時間
一次查詢會有三個過程:發送查詢報文,服務端執行查詢操作,收取回復報文。
在大部分情況下,有理由相信服務端執行時間很短,而大部分時間消耗在了網絡傳輸上。
1)對於那些在一個連接上只能發送一個查詢請求的客戶端,使用連接池就可以在同樣的時間內發送多個連接請求,從而更有效的使用服務器的資源。
2)而對於另外在一個連接上可以發送多個查詢請求,然后獲取多個請求的回復的服務器,雖然使用連接池的好處減低,但是在其中一個鏈接失敗時馬上可以取連接池中的下一個鏈接,也是一件好事。
因此問題一,對應第一個點,如mysql。
問題二對應第二點,redis。
