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

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

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

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

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

3 回答

?
犯罪嫌疑人X

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

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

有一個非常普遍的概念,即 WaitGroup 是管理多個 goroutines方式——它肯定是常用的,在許多情況下甚至是慣用的。你知道嗎?能夠調(diào)用 thread.join() 確實可能比處理 WaitGroups 更好,因為它只是在等待之前啟動的一堆線程/goroutines。

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

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

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

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


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

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

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

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

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


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

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

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

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


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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