Multithreading

為什麼使用更多執行緒會比使用更少執行緒慢

  • January 9, 2020

嘗試使用8 個執行緒執行程序 X ,並在n 分鐘內結束。

嘗試使用50 個執行緒執行相同的程序,並在n*10 分鐘內結束。

為什麼會發生這種情況,如何獲得可以使用的最佳執行緒數?

這是你問的一個複雜的問題。如果不了解更多關於執行緒的性質,就很難說。診斷系統性能時需要考慮的一些事項:

是程序/執行緒

  • CPU 受限(需要大量 CPU 資源)
  • 記憶體受限(需要大量 RAM 資源)
  • I/O 綁定(網路和/或硬碟資源)

所有這三種資源都是有限的,任何一種都可以限制系統的性能。您需要查看您的特定情況正在消耗哪些(可能是 2 個或 3 個)。

您可以使用ntopandiostatvmstat來診斷正在發生的事情。

“為什麼會這樣?” 有點容易回答。想像一下,你有一個可以並排容納四個人的走廊。您想將所有垃圾從一端移到另一端。最有效的人數是 4。

如果你有 1-3 個人,那麼你就錯過了使用一些走廊空間。如果你有 5 個人或更多人,那麼至少其中一個人基本上一直在另一個人後面排隊。越來越多的人只會堵塞走廊,不會加快活動速度。

因此,您希望在不引起任何排隊的情況下容納盡可能多的人。 為什麼要排隊(或瓶頸)取決於 slm 回答中的問題。

引用自:https://unix.stackexchange.com/questions/80424