Multithreading
為什麼使用更多執行緒會比使用更少執行緒慢
嘗試使用8 個執行緒執行程序 X ,並在n 分鐘內結束。
嘗試使用50 個執行緒執行相同的程序,並在n*10 分鐘內結束。
為什麼會發生這種情況,如何獲得可以使用的最佳執行緒數?
這是你問的一個複雜的問題。如果不了解更多關於執行緒的性質,就很難說。診斷系統性能時需要考慮的一些事項:
是程序/執行緒
- CPU 受限(需要大量 CPU 資源)
- 記憶體受限(需要大量 RAM 資源)
- I/O 綁定(網路和/或硬碟資源)
所有這三種資源都是有限的,任何一種都可以限制系統的性能。您需要查看您的特定情況正在消耗哪些(可能是 2 個或 3 個)。
您可以使用
ntop
andiostat
和vmstat
來診斷正在發生的事情。
“為什麼會這樣?” 有點容易回答。想像一下,你有一個可以並排容納四個人的走廊。您想將所有垃圾從一端移到另一端。最有效的人數是 4。
如果你有 1-3 個人,那麼你就錯過了使用一些走廊空間。如果你有 5 個人或更多人,那麼至少其中一個人基本上一直在另一個人後面排隊。越來越多的人只會堵塞走廊,不會加快活動速度。
因此,您希望在不引起任何排隊的情況下容納盡可能多的人。 為什麼要排隊(或瓶頸)取決於 slm 回答中的問題。