关于activeWorker <- activeRequest

来源:16-4 队列实现调度器

慕雪5492051

2022-09-16

老师,你好,

代码中activeWorker是从workerQ中获取的,workQ是从<-workerChan中获取的,workChan来自WorkerReady()的推送,但是在createWorker()中推入WorkerReady()的只是一个空的make(chan engine.Request),也就是说如果走到activeWorker <- activeRequest区间, activeWorker也只是一个 make(chan engine.Request)而已
既然activeWorker是一个空的产,不断的向里面推activeRequest,又没有弄出来让别人消费activeWorker,怎么会不死锁呢?

写回答

1回答

ccmouse

2022-09-19

createWorker定义了Worker,里面做了不少事情。https://git.imooc.com/coding-180/coding-180/src/master/crawler/engine/concurrent.go#L56

它通过WorkerReady(),把WorkerChan()返回出的空channel推给了Scheduler里的 s.workerChan。然后s.workerChan被选择作为activeWorker,获取数据。

0
1
慕雪5492051
非常感谢!
2022-09-23
共1条回复

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

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

5995 学习 · 1909 问题

查看课程