我有一個循環,每次迭代我都有一個新的通道源,我應該處理它。好的,最好顯示我的代碼。我有文件列表,我想要尾隨的每個文件(如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 本身很便宜,但分配給“魔法”部分的內存可能很大)
- 1 回答
- 0 關注
- 213 瀏覽
添加回答
舉報
0/150
提交
取消