1 回答

TA貢獻1898條經(jīng)驗 獲得超8個贊
那看起來不錯。一些注意事項:
您可以通過限制您生成的工作程序例程數(shù)量以外的方式來限制工作并行度。例如,您可以為收到的每條消息創(chuàng)建一個 goroutine,然后讓生成的 goroutine 等待限制并行度的信號量。當然有權衡取舍,但您不僅限于您所描述的方式。
sem := make(chan struct{}, n)
work := func(m sqs.Message) {
sem <- struct{}{} // When there's room we can proceed
// do the work
<-sem // Free room in the channel
}()
for _, m := range queue.ReceiveMessage(MAX_SQS_MESSAGES) {
for _, m0 := range m {
go work(m0)
}
}
僅處理 10 條消息的限制是由堆棧中的其他地方造成的。可能您正在看到前 10 個填充通道的競賽,然后工作沒有完成,或者您可能不小心從工作程序例程中返回。如果您的員工按照您所描述的模式堅持不懈,您將希望確定他們不會回來。
不清楚您是否希望在處理了一定數(shù)量的消息后返回該進程。如果您確實希望此進程退出,則需要等待所有工作人員完成其當前任務,并可能在之后通知他們返回。看看sync.WaitGroup同步他們的完成,并有另一個通道來表示沒有更多的工作,或者 close msgChannel,并在你的工作人員中處理。(看看二元組返回通道接收表達式。)
- 1 回答
- 0 關注
- 178 瀏覽
添加回答
舉報