并发版爬虫任务调度器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回答

ccmouse

2019-05-19

同学的理解是正确的。channel的设计之一就是可以让很多人抢。没抢到的人会被阻塞,所以要开一个goroutine,在goroutine里去抢

0
1
落秋流年
非常感谢!谢谢老师
2019-05-20
共1条回复

慕桂英8576785

2019-11-26

为什么在goroutine里抢就ok呢?一个func本质上不也是一个goroutine吗,为何在原有的func里抢就被限制了,而单独开一个goroutine就可以顺畅的发下去?这里还是有点不明白

0
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程