3 回答

TA貢獻1839條經驗 獲得超15個贊
是什么讓您認為Go使用用戶空間線程?
沒有。它使用OS線程,并且可以利用多個內核。
您可能會對以下事實感到困惑:默認情況下,Go僅使用1個線程來運行您的程序。如果啟動兩個goroutine,它們將在一個線程中運行。但是,如果一個I / O的goroutine塊創建了第二個線程,并繼續在新線程上運行另一個goroutine。
如果您確實想解鎖全部的多核功能,請使用該GOMAXPROCS()
功能。
runtime.GOMAXPROCS(4); //somewhere in main
現在,您的程序將使用4個OS線程(而不是1個),并且將能夠完全使用例如4個核心系統。

TA貢獻1779條經驗 獲得超6個贊
我假設“用戶空間線程”是指(例如)Go的goroutine。
的確,使用goroutines進行并發要比設計(通過手工和科學計算)為OS線程分配工作單元的專用算法效率低。
但是:每個Go程序都位于一個環境中,旨在解決特定問題??梢詾榄h境對Go程序提出的每個請求啟動一個新的goroutine。如果環境正在向Go程序發出并發請求,則即使Go程序僅使用1個OS線程,使用goroutines的Go程序也可能比串行程序運行得更快。goroutine能夠以更高的速度處理請求的原因(即使僅使用1個OS線程)是因為,當與A關聯的環境部分暫時無法執行時,Go程序會自動從goroutine A切換到goroutineB?;貞?。
但是,是的,的確,使用goroutine并將它們自動分配給多個OS線程確實比設計(通過手工和科學計算)為OS線程分配工作單元的專用算法效率低。
- 3 回答
- 0 關注
- 250 瀏覽
添加回答
舉報