第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

與 Python 等其他語(yǔ)言相比,golang 中的 WaitGroup 是否倒退了一步?

與 Python 等其他語(yǔ)言相比,golang 中的 WaitGroup 是否倒退了一步?

Go
繁星點(diǎn)點(diǎn)滴滴 2021-12-20 10:41:38
我對(duì) golang 很陌生,我正在嘗試 goroutine,雖然并發(fā)運(yùn)行很容易,但我對(duì) golang 使用WaitGroup.據(jù)我所知,goroutine 需要引用 WaitGroup 對(duì)象才能調(diào)用Done(),這意味著,我必須要么讓 goroutine 接受一個(gè)WaitGroup對(duì)象,要么讓W(xué)aitGroup對(duì)象成為 goroutine 的全局對(duì)象。但是在 Python 等其他語(yǔ)言中,您稱之為thread.join(),“控制”部分位于線程代碼之外。就像我說(shuō)的,我對(duì) golang 很陌生,我不知道為什么它是這樣設(shè)計(jì)的,有人可以對(duì)這方面有所了解嗎?更新:我希望爭(zhēng)論不是基于“Goroutine vs Thread”,在一天結(jié)束時(shí),他們都試圖實(shí)現(xiàn)(某種)“并發(fā)”,我的問題更多是關(guān)于控制程序流程。
查看完整描述

3 回答

?
犯罪嫌疑人X

TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊

hobbs 和 creker 的回答尤其出色,但我覺得還有很多話要說(shuō)。

有一個(gè)非常普遍的概念,即 WaitGroup 是管理多個(gè) goroutines方式——它肯定是常用的,在許多情況下甚至是慣用的。你知道嗎?能夠調(diào)用 thread.join() 確實(shí)可能比處理 WaitGroups 更好,因?yàn)樗皇窃诘却皢?dòng)的一堆線程/goroutines。

但有這么多到比Go的并發(fā)模型。

Goroutines 專門設(shè)計(jì)為沒有所有權(quán)、層次結(jié)構(gòu)或句柄的概念。他們獨(dú)立、平等并負(fù)責(zé)結(jié)束自己的執(zhí)行。這與強(qiáng)大的并發(fā)原語(yǔ)相結(jié)合,賦予 Go 模型幾乎無(wú)與倫比的靈活性。

因此,如果您發(fā)現(xiàn)自己幾乎每次使用 goroutine 時(shí)都在使用 WaitGroup,那么您可能沒有在建模和構(gòu)建程序時(shí)利用并發(fā)性- 更有可能您只是在使用 goroutine 來(lái)并行化計(jì)算。

為了更直接地回答您的問題,與 thread.join() 之類的東西相比,WaitGroups 相當(dāng)原始,但是原始的低級(jí)構(gòu)建塊對(duì)于 Go 的并發(fā)模型更有用。畢竟,goroutines 不是線程,它們的使用方式并不完全相同。


查看完整回答
反對(duì) 回復(fù) 2021-12-20
?
一只名叫tom的貓

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊

為什么它是這樣設(shè)計(jì)的

這實(shí)際上已經(jīng)被 golang 團(tuán)隊(duì)解釋了很多次——為什么我們不能殺死 goroutines,為什么它們沒有我們可以讀取的 ID,為什么我們不能像線程的Join.

它被解釋了多次,但我只能找到這個(gè)?;旧?,作者不希望你依賴線程局部性——鎖定特定的線程/goroutine,只為它擁有一個(gè)本地存儲(chǔ)等等。當(dāng)你沒有任何方法知道你實(shí)際上在哪個(gè) goroutine 中運(yùn)行您被迫以真正并發(fā)的方式設(shè)計(jì)您的應(yīng)用程序。您的代碼由真正獨(dú)立的部分組成,這些部分同時(shí)運(yùn)行,它們并不關(guān)心具體如何。您不在乎哪個(gè) goroutine 接收您的代碼,也不在乎哪個(gè)操作系統(tǒng)線程正在運(yùn)行您的代碼。這就是通道、選擇和其他原語(yǔ)的用武之地。它們可以幫助您以這種方式構(gòu)建應(yīng)用程序。而且我相信它不會(huì)就此止步。


查看完整回答
反對(duì) 回復(fù) 2021-12-20
?
慕碼人8056858

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊

不,這只是不同的事情做不同的事情。它們甚至沒有真正的可比性,因?yàn)?aWaitGroup本質(zhì)上等待多個(gè)事物(并且可以在其生命周期內(nèi)添加事物)而 python 線程join總是只等待那一件事。

也就是說(shuō),Go 的庫(kù)更多地是為您提供做更高級(jí)的事情所需的原始東西,而 Python 的庫(kù)更多的是“包含電池”的理念。使用 Go 給你的東西,你可以創(chuàng)建一個(gè)有點(diǎn)像 python 的類型Thread。這可能不是使用 Go 的最佳方式,但如果您愿意,可以使用工具來(lái)完成它。然而,標(biāo)準(zhǔn)庫(kù)不會(huì)對(duì)這樣的事情進(jìn)行標(biāo)準(zhǔn)化。


查看完整回答
反對(duì) 回復(fù) 2021-12-20
  • 3 回答
  • 0 關(guān)注
  • 199 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)