我在Linux/gcc上使用pthread_create
創建N
線程。每個線程使用for (;;) printf(...)
它的ID儘可能快地寫入,沒有別的。我讓整個程序運行3秒鐘,使用usleep
並注意到在我的4-core
CPU上當N=4
它產生了大約1,000,000行,當它產生大約4倍的時候。在4核CPU 8線程表現更好的原因是什麼? CPU沒有啓用超線程。什麼是合適的線程數
回答
I/O和CPU操作有很大不同。如果運行CPU密集型計算,則N =內核數量將是最優的。對於I/O,最佳數量可能會更高。
+1。但是 - *「對於I/O,最佳數字可以更高。」* - 或者,它可以更低。真的取決於I/O吞吐量。 – ArjunShankar
但是爲什麼最優數量的線程對於IO來說更高? – Ben
假設您的I/O操作阻止了網絡套接字上的讀取操作。每個任務可以被阻塞幾秒鐘,但一旦數據到達,處理可以非常快。因此,您的機器可以處理比內核多得多的連接,但由於每個操作都被阻塞,因此需要大量線程來同時處理它們。 –
如果您擁有4thread,您將不會在每個核心上運行一個線程。 2線和8線都沒有。 多核心思想是將所取得的成果分開。此外,您只需顯示線程ID即可輕鬆實現CPU工作。因此,它不使用你的CPU容量,而是處理顯示事件的能力。
「*你不會在每個核心上運行線程*」爲什麼不?如果將線程綁定到處理器,至少可以這樣做。 – Ben
- 1. 什麼是合適的去shebang線?
- 2. 什麼線程安全的收集適合這種情況?
- 3. 什麼是線程?
- 4. 什麼是線程?
- 5. 這個ASP.NET MVC應用程序的合適的路線設計是什麼?
- 6. 什麼繪圖技術是合適的?
- 7. 什麼是適合HTML的BLOB類型?
- 8. 什麼是適合C#的Twitter SDK?
- 9. 什麼是合適的grep + sed語法?
- 10. 什麼是合適的循環?
- 11. html5適合IE6的功能是什麼?
- 12. 什麼是合適的算法?
- 13. 什麼是rand()的合適替代品?
- 14. 什麼是relayjs適合的後端?
- 15. actionscript函數中的線程是什麼?
- 16. MaxJSONlength適合什麼?
- 17. 什麼樣的數據適合xsd:QName?
- 18. 合併函數參數的適當命名約定是什麼?
- 19. 什麼是ASP.NET MVC不適合?
- 20. Python,是否適合一個線程產生另一個線程
- 21. 爲什麼遠程button_to不適合我?
- 22. 什麼是適合這個應用程序的解決方案
- 23. 保存BPMN業務流程的合適xml格式是什麼?
- 24. Tomcat什麼是線程總計數
- 25. 什麼是石英默認線程數
- 26. 什麼是用戶線程?
- 27. 什麼是暫停線程?
- 28. 什麼是Java2D Disposer線程?
- 29. 什麼是「內聯線程」?
- 30. 什麼是線程(java,android)?
I/O操作,超線程,很多東西。 –
@MarcoMariani不,超線程不可用。 – Cartesius00
但您正在使用阻止I/O,對不對?所以你的線程在外設工作時處於空閒狀態,並且CPU正在等待它們 –