回答
我不知道(各種)Linux調度程序如何處理這個問題,但是當線程運行在不同的內核上時,線程間通信變得更加昂貴。
因此,如果還有其他進程需要CPU時間,調度程序可能會決定在相同的CPU 上運行進程的線程。
例如,對於雙核CPU,如果有兩個進程使用兩個線程,並且所有進程都使用CPU時間,則最好在第一個Core上運行第一個進程的兩個線程,兩個線程第二個核心上的另一個進程。
多個單線程進程對於系統來說比單個多線程進程更昂貴。但他們將從具有相同效率的多核CPU中受益。加上線程間通信比進程間通信便宜得多。如果這些線程真的形成單一的應用程序,我投多線程。
「但是他們將從具有相同效率的多核CPU中受益。通過「他們」,你是在談論進程還是線程? 「但」讓我困惑,對不起。 – someguy 2010-08-03 10:39:02
這不是真的,來自在不同內核上運行的相同進程的兩個線程需要大量內存/高速緩存同步,而單獨進程不需要該內存/高速緩存同步 – 2011-11-26 03:20:29
@tolomea如果您需要同時寫入共享內存,內存一致性成本將適用於任何線程或進程。 OS安排線程和進程; CPU核心將通過任何程序計數器爆炸。大多數主流處理器也至少有一個共享高速緩存級別,並且窺探寫入操作以保持內存視圖一致而不通過主內存。在多個CPU之間共享內存時,這會變得更加昂貴,但同樣不好,無論共享訪問源自何處 – tbone 2012-05-09 07:52:53
這是我的新聞。特別是Linux對線程和進程幾乎沒有區別。它們實際上只是共享其地址空間的進程。
顯然它是寫在文檔的某處。不過,我寧願用你的話來說,也不願意傳達一個模糊的謠言。 – someguy 2010-08-03 10:30:49
看看clone()系統調用。 – 2010-08-03 13:21:41
雖然Windows使用光纖和線程我有時會認爲Linux使用進程和線程。 我發現,在編寫多線程流程時,您必須嚴格,迂腐,嚴謹和流血,才能在設計線程的過程中實現利用任何數量的內核的好處的平衡。該進程將運行的機器。
在Linux上,與進程相比,線程是否真的不太可能從多核處理器中受益?沒人知道。
共享內存多線程對從工具鏈到開發,調試,推理和測試代碼等所有內容都施加了巨大的複雜性成本。從不使用共享內存多線程,您可以合理使用多進程設計。
@Marcelo是對的,任何像樣的操作系統都會非常類似地處理線程和進程,一些線程的cpu親和性可能會減少多線程進程的多處理器使用率,但是您應該看到任何兩個進程也有一個共同的.text段。
根據複雜性和體系結構設計約束挑選線程與進程,速度幾乎不會進入。
我同意設計應該是第一位的,但是當你說「從不使用共享內存多線程」時,你自相矛盾。我明白你的意思是線程更復雜,但這是誇張的。我將堅持使用線程,除非它使用進程是有意義的(可能用於「多文檔」應用程序)。 – someguy 2010-08-03 21:14:08
它實際上全部取決於調度程序,多處理類型和當前運行環境。
假設沒有,測試,測試,測試!
如果你是系統上唯一的多線程進程,多線程通常是一個好主意。
但是,從易於開發的角度來看,有時需要單獨的地址空間和共享數據,特別是在NUMA系統中。
可以肯定的一件事:如果它是'超線程'系統,由於密切的內存共享,線程效率更高。
如果它是一個普通的多核處理..它應該是類似的。
如果是NUMA系統,最好讓數據共享和代碼分離。同樣,這一切都依賴於架構,除非您身在HPC業務中,否則不管性能如何。
如果您在HPC(超級計算)業務中使用TEST !.這完全取決於機器(平均而言,好處是10-25%,如果你說話天數不同,那麼它很重要)
- 1. 多CPU核心中的Java多線程
- 2. 將cpu內核分配給進程 - Linux
- 3. cpu中的內核和線程
- 4. setitimer,SIGALRM和多線程進程(linux,c)
- 5. 研究進程和線程在Linux 2.6內核的網站
- 6. cpu核心與線程
- 7. 多核CPU在同一時間調度同一進程的多個線程
- 8. CPU調度和內核級線程
- 9. 獲取Linux內核中另一個進程的進程CPU時間時鐘
- 10. 超線程和CPU綁定進程
- 11. 多線程和多核心
- 12. 多核和多線程
- 13. Java單線程CPU使用和多線程CPU使用
- 14. Linux中的CPU訂購(帶超線程)
- 15. 查找unix(solaris/linux)中進程的線程使用資源(CPU和內存)
- 16. 轉換程序爲多線程,利用多核cpu
- 17. 在Linux內核(模塊編程)中如何從多線程進程獲取threadids?
- 18. 關於CPU核心數量的多線程和並行度
- 19. 進程的CPU使用率(任務)Linux內核
- 20. Linux內核線程在CPU硬件線程上映射1:1或m:n嗎?
- 21. 如何使用Nodejs多CPU核心進行多進程?
- 22. 多線程中未知進程的高CPU使用率
- 23. 多線程和SMP Linux
- 24. 爲什麼Linux內核線程會佔用cpu
- 25. linux - 內核線程搶佔
- 26. Linux內核線程問題
- 27. 與CPU核心的Java線程關係
- 28. Linux進程和線程調度
- 29. Grails和多線程進程
- 30. 線程進入CPU性能
我發現這非常有幫助,謝謝。 – someguy 2010-08-03 11:14:56