关于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回答
-
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,获取数据。
012022-09-23
相似问题