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

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

如何在 Go 中通過通道替換 goroutines 循環

如何在 Go 中通過通道替換 goroutines 循環

Go
神不在的星期二 2021-10-25 19:59:56
我有一個循環,每次迭代我都有一個新的通道源,我應該處理它。好的,最好顯示我的代碼。我有文件列表,我想要尾隨的每個文件(如tail -f)。我正在使用github.com/ActiveState/tail包。for _, tailFile := range files {    t, _ := tail.TailFile(tailFile, c)    // Goroutine per tailing file    go func() {        for line := range t.Lines { // t.Lines is a channel            // Do some magic here        }    }()}我可以有數千個文件,我想并行運行我的尾巴。如您所見,我的程序將有數千個 goroutine??梢詫⒋搜h更改為通道,只有 1 個 goroutine 嗎?
查看完整描述

1 回答

?
絕地無雙

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

您會在博客文章pipelines 中找到類似的方法(每個文件一個 goroutine)。

中的 MD5All 實現parallel.go為每個文件啟動一個新的 goroutine。在包含許多大文件的目錄中,這可能會分配比機器上可用的內存更多的內存。

我們可以通過限制并行讀取的文件數量來限制這些分配。在 中bounded.go,我們通過創建固定數量的 goroutine 來讀取文件來做到這一點。
我們的管道現在分為三個階段:遍歷樹、讀取和消化文件以及收集摘要。

如果您發現自己受到過多 goroutine 分配的內存的限制,您可以組織自己的代碼以使用有限數量的 goroutine。(goroutine 本身很便宜,但分配給“魔法”部分的內存可能很大)


查看完整回答
反對 回復 2021-10-25
  • 1 回答
  • 0 關注
  • 213 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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