这让我很头疼,我不知道如何解决它;
我想要并行运行固定数量的 N 个 goroutines
从永无止境的队列中,我将获取有关要处理的作业的 X 消息
我想让 N 个 goroutine 处理这些 X 个作业,一旦其中一个例程无事可做,我想从永无止境的队列中获取另一个 X 个作业
下面答案中的代码(请参阅 url)可以出色地处理任务,但是一旦任务列表为空,工作人员就会死亡,我希望他们保持活动状态并以某种方式通知主代码他们无法工作,以便我可以获取更多作业以使用任务填充任务列表
使用下面的 user:Jsor 示例代码,我尝试创建一个简单的程序,但我很困惑。
import (
"fmt"
"strconv"
)
//workChan - read only that delivers work
//requestChan - ??? what is this
func Worker(myid string, workChan <- chan string, requestChan chan<- struct{}) {
for {
select {
case work := <-workChan:
fmt.Println("Channel: " + myid + " do some work: " + work)
case requestChan <- struct{}{}:
//hm? how is the requestChan used?
}
}
}
func Logic(){
workChan := make(chan string)
requestChan := make(chan struct{})
//Create the workers
for i:=1; i < 5; i++ {
Worker( strconv.Itoa( i), workChan, requestChan)
}
//Give the workers some work
for i:=100; i < 115; i++ {
workChan<- "workid"+strconv.Itoa( i)
}
}
明月笑刀无情
相关分类