1
A
回答
2
一般來說,在多核心盒子上,沒有。如果可以使用相同的內核,那麼利用仍在L1緩存中的數據可能會獲得優勢(由其他人發佈),但是明確強制內核關聯的缺點是不好的:
線程X是創建並綁定到核心0. 線程X運行。 系統調用的線程X塊,可能用於I/O或線程間通信。 操作系統在內核0上運行線程Y. 線程X在內核1,2和3空閒時準備就緒。
現在呢?
不必要地搶佔線程Y?移動Y的開銷,以及如果Y也綁定到核心0,那該怎麼辦? 再次阻止X直到Y塊?防止X在可以做時取得進展。
2
它依賴於操作系統, 然而,一般來說,操作系統試圖讓線程在相同的內核上運行,因爲線程所使用的數據在內核中被緩存的可能性更高,從而提高了性能。
它都基於線程調度機制。
相關問題
- 1. TaskScheduler始終運行在同一線程上
- 2. 線程是否在整個生命週期內運行在同一個CPU /內核上?
- 3. iframe是否與所有者在同一個線程上運行?
- 4. 如何在不同內核上運行不同的線程?
- 5. C#任務是否在一個內核上運行?
- 6. AsynckTask.onPostExecute和FragmentActivity.onResumeFragments是否在同一個線程(ui線程)上運行?
- 7. 在多個內核上運行程序
- 8. 是否有可能在一個以上的CPU內核上同時執行單線程程序?
- 9. 在Python中加入一個始終運行的線程
- 10. 如何在同一個內核上並行多次運行相同的進程?
- 11. onTouch(),onClick()是否在同一個線程中按順序運行?
- 12. 這是否在UI線程上運行
- 13. 是否SimpleCursorAdapter在UI線程上運行
- 14. 同步方法是否在UI線程(Android)的不同線程上運行?
- 15. ASP.NET請求始終在同一個線程上執行BeginRequest和EndRequest?
- 16. 在終止狀態線程上運行()
- 17. 我如何確保我的線程/進程在不同內核上運行
- 18. UNIX初始化進程是否始終運行
- 19. 如何使協程始終在同一個線程中工作?
- 20. System.Windows.Forms.Timer是否在與UI不同的線程上運行?
- 21. 一個線程始終運行,沒有其他線程的機會
- 22. Python:fork和exec一個進程在不同的終端上運行
- 23. 內核線程是否被scheduller調度?
- 24. 確保所有Linux系統線程在內核上運行0
- 25. 線程池是否可以在單線程函數上運行?
- 26. 是否同時運行同一過程的多個SQL/CLR調用(如線程)?
- 27. 事件是否始終在氮氣的相同過程中運行?
- 28. 同時在python中運行多個線程 - 是否有可能?
- 29. 在四個並行內核上運行不同的Powershell命令
- 30. 在IO上等待的線程是否也會阻塞內核?
如果只有一個CPU核心,是的。對於多核機器來說,答案是「通常不是」(核心之間的線程遷移是可能的),但OS /實現依賴於此。在某些OS/libs/pthreads中有「setaffinity」調用來將某些線程綁定到可用CPU核心的某個子集。 – osgx 2013-02-20 12:39:07
簡短回答:不,線程將按計劃程序認爲合適的方式跳轉核心。如果您對這些細節感到好奇(至少對於Windows),您可能需要查看[Windows Internals第6版](http://www.amazon.com/dp/0735648735)(ISBN:978-0735648739)。第5章的一半致力於深入解釋線程調度。 – 2013-02-20 12:39:20