并发版爬虫任务调度器WorkerChan
来源:16-3 并发调度器

落秋流年
2019-05-15
func (s *SimpleScheduler) Submit(r engine.Request) {
go func() {s.workChan <- r}()
}
老师,这段代码是并发版爬虫简单调度器中的submit方法。我有个疑问,这个并发版的架构图中Scheduler用了很多个goroutine与worker通讯,任务通道是不是只有一个啊,就是说虽然有很多goroutine但是大家用的都是一个派发通道,接受者worker很多,但也是在抢一个接受通道。这个通道就是concurrentEngine的workChan。goroutine只是避免了阻塞任务流。老师我可以这样理解吗
写回答
2回答
-
同学的理解是正确的。channel的设计之一就是可以让很多人抢。没抢到的人会被阻塞,所以要开一个goroutine,在goroutine里去抢
012019-05-20 -
慕桂英8576785
2019-11-26
为什么在goroutine里抢就ok呢?一个func本质上不也是一个goroutine吗,为何在原有的func里抢就被限制了,而单独开一个goroutine就可以顺畅的发下去?这里还是有点不明白
00
相似问题
后面的章节哪个地方用到了这个算法呢?
回答 2
任务排队处理问题
回答 1