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

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

Go的多線程與pthread或Java線程之間有什么區別?

Go的多線程與pthread或Java線程之間有什么區別?

Go
肥皂起泡泡 2021-04-09 14:15:29
Go的多線程方法與其他方法(例如pthread,boost :: thread或Java Threads)有什么區別?
查看完整描述

3 回答

?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

從第3天教程引述<-閱讀此內容以獲取更多信息。

Goroutines根據需要多路復用到系統線程上。當goroutine執行阻塞系統調用時,不會阻塞其他goroutine。

在某些時候,我們將對與CPU綁定的goroutine進行相同的操作,但是現在,如果要使用用戶級并行性,則必須設置$ GOMAXPROCS。或致電runtime.GOMAXPROCS(n)。

goroutine不一定與OS線程相對應。它可以具有較小的初始堆棧大小,并且堆棧將根據需要增長。

需要時,可以將多個gorouitines復用到單個線程中。

更重要的是,該概念如上所述,goroutine是一個順序程序,可能會阻塞自身,但不會阻塞其他goroutine。

Goroutines在gccgo中作為pthreads實現,因此它也可以與OS線程相同。它將OS線程的概念與我們在編程時對多線程的思想分開。


查看完整回答
反對 回復 2021-04-26
?
鳳凰求蠱

TA貢獻1825條經驗 獲得超4個贊

在參考編譯器(5g / 6g / 8g)中,主調度程序(src / pkg / runtime / proc.c)創建N個OS線程,其中N由runtime.GOMAXPROCS(n)(默認值為1)控制。每個調度程序線程都會從主列表中拉出一個新的goroutine并開始運行它。goroutine將繼續運行,直到進行系統調用(例如printf)或在通道上進行操作為止,此時調度程序將獲取下一個goroutine并從其停止的那一點開始運行它(請參閱gosched()調用src / pkg / runtime / chan.c)。

出于所有目的和目的,調度是使用協程實現的。可以使用setjmp()和longjmp()在C語言中編寫相同的功能,Go(以及其他實現輕量級/綠色線程的語言)只是為您實現了自動化。

輕量級線程的好處在于,因為它是所有用戶空間,因此創建“線程”非常便宜(分配小的默認堆棧),并且由于線程之間相互通信的固有結構而非常高效。缺點是它們不是真正的線程,這意味著單個輕量級線程可以阻止整個程序,即使看起來所有線程都應同時運行。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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