亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在特定的 CPU 上運行,而不是一個 goroutine?

在特定的 CPU 上運行,而不是一個 goroutine?

Go
慕的地8271018 2022-03-03 15:10:39
golang只是有一種方法runtime.GOMAXPROCS(1)可以設置應用程序同時運行一個goroutine,但是我想讓應用程序只在特定的 cpu 上運行?
查看完整描述

2 回答

?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

要啟動您的 Go 二進制文件,假設example.exe它僅在 Windows 上的 CPU 0 上運行,您可以使用start帶有“affinity”參數的命令:

start /affinity 1 example.exe

我不知道您到底想實現什么,但請參閱描述 GOMAXPROCS的文檔 - Go 運行時可能會更有效地執行相同的操作。



查看完整回答
反對 回復 2022-03-03
?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

gc編譯器(6g8g)下,您必須將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/的更多信息。


查看完整回答
反對 回復 2022-03-03
  • 2 回答
  • 0 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號