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

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

Go和Java使用用戶空間線程的事實是否就意味著您不能真正利用多核?

Go和Java使用用戶空間線程的事實是否就意味著您不能真正利用多核?

Go
ITMISS 2021-04-09 12:15:10
最近,我們一直在操作系統類中談論線程,我想到了一個問題。由于Go(和Java)使用用戶空間線程而不是內核線程,這是否意味著您不能有效利用多個內核,因為OS僅將CPU時間分配給進程,而不是線程本身?
查看完整描述

3 回答

?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

是什么讓您認為Go使用用戶空間線程?

沒有。它使用OS線程,并且可以利用多個內核。

您可能會對以下事實感到困惑:默認情況下,Go僅使用1個線程來運行您的程序。如果啟動兩個goroutine,它們將在一個線程中運行。但是,如果一個I / O的goroutine塊創建了第二個線程,并繼續在新線程上運行另一個goroutine。

如果您確實想解鎖全部的多核功能,請使用該GOMAXPROCS()功能。

runtime.GOMAXPROCS(4); //somewhere in main

現在,您的程序將使用4個OS線程(而不是1個),并且將能夠完全使用例如4個核心系統。


查看完整回答
反對 回復 2021-04-26
?
哆啦的時光機

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線程分配工作單元的專用算法效率低。


查看完整回答
反對 回復 2021-04-26
  • 3 回答
  • 0 關注
  • 250 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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