【发布时间】:2014-03-23 21:31:08
【问题描述】:
这是我的头,我不知道如何解决它;
- 我想让固定数量 N 个 goroutine 并行运行
- 我将从永无止境的队列中获取有关要处理的作业的 X 条消息
- 我想让 N 个 goroutine 处理这些 X 个作业,一旦其中一个例程无事可做,我想从永无止境的队列中获取另一个 X 个作业
下面答案中的代码(请参阅 url)可以出色地处理任务,但是一旦该任务列表为空,工作人员就会死去,我希望他们保持活力并以某种方式通知主代码他们已经失业所以我可以获取更多的工作来填充任务列表
How would you define a pool of goroutines to be executed at once in Golang?
使用下面的 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)
}
}
【问题讨论】:
标签: concurrency go