2 回答

TA貢獻1794條經驗 獲得超8個贊
要啟動您的 Go 二進制文件,假設example.exe
它僅在 Windows 上的 CPU 0 上運行,您可以使用start
帶有“affinity”參數的命令:
start /affinity 1 example.exe
我不知道您到底想實現什么,但請參閱描述 GOMAXPROCS的文檔 - Go 運行時可能會更有效地執行相同的操作。

TA貢獻1807條經驗 獲得超9個贊
在gc編譯器(6g或8g)下,您必須將GOMAXPROCS設置為大于默認值 1 以允許運行時支持使用多個 OS 線程,即所有 goroutine 共享同一線程,除非 GOMAXPROCS 設置為一個值大于 1。
當GOMAXPROCS大于 1 時,它們在具有那么多線程的線程池上運行。使用gccgo編譯器 GOMAXPROCS 實際上等于正在運行的 goroutine 的數量。假設n
是機器上的處理器或內核數。如果你設置環境變量GOMAXPROCS >= n
,或者調用runtime.GOMAXPROCS(n)
,那么 goroutine 會被劃分(分布)在 n 個處理器之間。
然而,更多的處理器并不一定意味著性能的線性提高,主要是因為需要更多的通信:消息傳遞開銷增加。經驗法則似乎是,對于 n 個核心,將GOMAXPROCS 設置為 n-1 會產生最佳性能,還應遵循以下規則:
number of goroutines > 1 + GOMAXPROCS > 1
所以如果在某個時間點只有一個goroutine在執行,不要設置GOMAXPROCS!
如果您希望將 goroutine 鎖定到特定的 OS 線程,您可以使用runtime.LockOSThread執行此操作。
LockOSThread 將調用 goroutine 連接到其當前的操作系統線程。在調用的 goroutine 退出或調用 UnlockOSThread 之前,它將一直在該線程中執行,其他 goroutine 都不能。
有關https://golang.org/pkg/runtime/的更多信息。
- 2 回答
- 0 關注
- 169 瀏覽
添加回答
舉報