在.NET或Java中啓動線程或進程時,有沒有辦法選擇啓動哪個處理器或內核?共享內存模型在這種情況下如何工作?應用程序如何在.NET或Java中使用多個內核或CPU?
回答
如果您使用多個線程,操作系統將自動處理使用多個內核。
當虛擬機使用本機線程(而不是綠線程)時,操作系統負責多線程,並且不能指定低級別細節,例如爲特定線程選擇處理器。這樣做更好,因爲通常有更多的線程比可用的處理器多,因此操作系統需要進行時間分片以使所有線程都有機會運行。這就是說,如果你有關鍵的任務,你可以設置線程的優先級,而線程API通常提供這種可能性。例如見Java API的:http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Thread.html#setPriority(int)
PS:有什麼東西在解析引擎壞......我不得不上面的鏈接添加爲純文本
有沒有辦法選擇哪種處理器或核心它是否啓動?
您可以使用任務管理器告訴窗口您的程序應該允許運行的CPU(s)。通常這隻對解決多線程實現中斷的傳統程序有用。要做到這一點,
- 運行任務管理器
- 找到您在
Processes
窗口過程。 - 右鍵單擊並選擇
Set Affinity...
- 勾選您希望允許應用程序運行的CPU旁邊的複選框。 Windows會再次只從過程調度線程在那些特定的CPU的
如果我沒有記錯,Windows會「記住」了隨後的時間這些設置你的進程運行,但請不要可以引用我這句話 - 運行一些測試你自己:-)
你也可以在你的程序啓動後使用System.Diagnostics.Process.ProcessorAffinity屬性以編程方式執行此操作,但我不認爲它會'記住'設置,所以總會有一個短時間內你的應用程序在任何CPU窗口看來都適合運行。我不知道如何在java中做到這一點對不起。
注:
這適用於整個過程的水平。如果僅爲CPU0設置親和性,然後啓動50個線程,那麼所有這些線程中的50個都將在CPU0上運行,而CPU1,2,3等將無所事事。
只是爲了重申一點,這主要用於排除故障遺留軟件的故障。如果您的軟件沒有損壞,那麼您確實不應該混淆這些設置,並讓Windows決定運行程序的最佳CPU,以便將系統其餘部分的性能考慮在內。
至於「共享內存」的模式,它的工作原理是相同的,但也有更多的事情,當你的應用程序在多個CPU的運行,而不是隻是時間片,在單一一個可以去巧妙地錯了。
對於一個令人大開眼界的例子,請閱讀this ridiculousfish article about CPU's and Memory Barriers。
它的目標是在PowerPC上進行OSX開發,但一般來說它應該適用於任何地方。恕我直言,它是前十名之一'所有的開發者都應該閱讀'我讀過的文章。
我已經在幾個程序中使用了這個,因爲我的核心0有點搞砸了。
// Programmatically set process affinity
var process = System.Diagnostics.Process.GetCurrentProcess();
// Set Core 0
process.ProcessorAffinity = new IntPtr(0x0001);
或
// Set Core 1
process.ProcessorAffinity = new IntPtr(0x0002);
更多關於這方面 「Process.ProcessorAffinity Property」。
我會看看.NET框架的並行擴展。它仍然在CTP,但它應該是最好的使用多核心處理器。開始使用.NET的最簡單的地方在於parallel teams blog。
至於Java我不知道。
- 1. Java多線程程序如何能夠使用多個CPU內核?
- 2. 首選多個Solr應用程序或單應用程序多內核設置?
- 3. 如何獲得內存或在C#中使用內核.net核心/ .net標準
- 4. 如何在應用程序中使用四核CPU
- 5. Java應用程序的多核CPU利用率
- 6. 如何在.NET核心應用程序中使用.NET核心類庫?
- 7. 使用javac多個CPU內核
- 8. 如何獲取我的Web應用程序的CPU或內存使用情況?
- 9. 如何在.NET核心應用程序中使用Python?
- 10. Java Process Builder,程序進程啓動但程序沒有使用CPU或內存
- 11. 使用Web服務的Java或.NET應用程序示例?
- 12. 如何在Eclipse中獲得Java程序以使用多個處理內核?
- 13. 在Java中使用線程併發模擬多核CPU
- 14. 用戶程序或內核模塊?
- 15. 多CPU核心中的Java多線程
- 16. 一個應用程序或多個應用程序或單一登錄?
- 17. OpenCL應用程序中的多個程序(與內核)
- 18. 如何讓clisp或sbcl使用所有cpu核心可用?
- 19. 如何在java應用程序中使用多個數據源
- 20. 如何在java中查找當前有多少CPU內核
- 21. Java - 如何在兩個或多個Web應用程序之間共享會話?
- 22. 如何在.NET應用程序中使用自定義配置文件或app.config
- 23. 如何在使用vscode的.net核心Web應用程序中使用類庫?
- 24. 如何在兩臺或三臺或多臺計算機上運行使用sql的.net應用程序?
- 25. 多個單頁應用程序或單頁應用程序
- 26. 限制Java應用程序的內存和CPU使用率
- 27. 不能用insmod或使用內核間模塊(一個或多個)
- 28. 如何使用Java或C++編寫GUI桌面應用程序?
- 29. 何時或如何在流星應用程序中使用this.flush()
- 30. 多個應用程序的安裝程序或多個launchables
你能舉出這個嗎?你從哪裏找到這些信息? – 2008-09-11 02:27:39