我有一些 Go 代碼在我的 Macbook(具有兩個物理內(nèi)核的 Intel Core i5 處理器)上進行基準測試。Go 的runtime.NumCPU()產(chǎn)量為 4,因為它計算“虛擬核心”在這種情況下,我對虛擬內(nèi)核了解不多,但我的基準測試似乎表明,當我使用配置代碼時,多處理速度只有 2 倍runtime.GOMAXPROCS(runtime.NumCPU())如果我使用 2 個而不是 4 個內(nèi)核,我將獲得相同的性能。我會發(fā)布代碼,但我認為這在很大程度上與我的問題無關(guān),這些問題是:1)這是正常的嗎?2)如果是的話,為什么多個虛擬內(nèi)核會使像我的macbook這樣的機器受益?更新:萬一這很重要,在我的代碼中,goroutines 的數(shù)量與你設(shè)置runtime.GOMAXPROCS() 的任務(wù)是完全并行的,沒有相互依賴關(guān)系或共享狀態(tài)。它作為本機編譯的二進制文件運行。
1 回答

慕斯王
TA貢獻1864條經(jīng)驗 獲得超2個贊
1)這是正常的嗎?
如果您的意思是虛擬內(nèi)核出現(xiàn)在 中runtime.NumCPU()
,那么是的,至少在某種意義上,用 C 編寫的程序以及在其他運行時(如 JVM)上運行的程序?qū)⒖吹?a >相同數(shù)量的 CPU。如果您指的是性能,請參見下文。
2)如果是的話,為什么多個虛擬內(nèi)核會使像我的macbook這樣的機器受益?
這是一個復雜的問題,取決于工作量。最能體現(xiàn)其優(yōu)勢的工作負載通常是高度并行的,例如 3D 渲染和某些類型的數(shù)據(jù)壓縮。在其他工作負載中,這些好處可能不存在,并且 HT 對性能的影響可能是負面的(由于運行更多線程的通信和上下文切換開銷)。閱讀關(guān)于超線程的維基百科文章可以進一步闡明這個問題。
這是一個示例基準測試,它比較了具有和不具有 HT 的相同 CPU 的性能。請注意,HT 并不總是提高性能,在某些情況下,實際上會降低性能。
- 1 回答
- 0 關(guān)注
- 194 瀏覽
添加回答
舉報
0/150
提交
取消