为工作程序goroutine对项目进行排队的正确方法?
我正在编写一个应用程序,允许用户上传文件并将其排队等待处理。我的方法是创建一个goroutine来处理上传的文件,并使用一个通道来表示新文件已准备好处理 基本上,处理goroutine执行以下操作:为工作程序goroutine对项目进行排队的正确方法?,go,race-condition,channel,Go,Race Condition,Channel,我正在编写一个应用程序,允许用户上传文件并将其排队等待处理。我的方法是创建一个goroutine来处理上传的文件,并使用一个通道来表示新文件已准备好处理 基本上,处理goroutine执行以下操作: for { while itemForProcessing() { processNextItem() } select { case <-signalChan: case <-stopChan: return
for {
while itemForProcessing() {
processNextItem()
}
select {
case <-signalChan:
case <-stopChan:
return
}
}
用于{
而itemForProcessing(){
processNextItem()
}
挑选{
案例为避免信号丢失,请使用容量为1的通道。此处通道用作可更新的标志-表示应用程序可以读取某些内容。我想这是一种简化的可能性-只需通过通道传递新对象即可。这解决了几个问题:简单的并行性、竞争条件保护、简化。
select {
case signalChan <- true:
default:
}