是否線程池一定比單線程高效?

不一定,
比如Redis就是單線程的,但它卻非常高效,基本操作都能達到十萬量級/s。從線程這個角度來看,部分原因在於:
1.多線程帶來線程上下文切換開銷,單線程就沒有這種開銷;
2.採用單線程,避免了不必要的上下文切換和競爭條件,也不存在多進程或者多線程導致的切換而消耗 CPU,不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因爲可能出現死鎖而導致的性能消耗;
3.使用多路I/O複用模型,非阻塞IO;一個線程監控多個socket。這裏“多路”指的是多個網絡連接,“複用”指的是複用同一個線程。
4.數據結構簡單,對數據操作也簡單,Redis中的數據結構是專門進行設計的;其中常見的數據結構類型有:String、List、Set、Hash、Sorted Set或者是ZSet這5種。
當然“Redis很快”更本質的原因在於:
Redis基本都是內存操作,這種情況下單線程可以很高效地利用CPU。而多線程適用場景一般是:存在相當比例的IO和網絡操作。
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章