老师好,调度器的处理这里用到了goroutine和channel的数据传输。所以一直有点蒙,在这里阐述下自己的理解。
先说下简单的调度器
1,要先开很多的worker,这时候就初次用到了goroutine
2,要往createWorker这个goroutine里传数据,就利用到了channel
由于实际工作者是worker,这时候定义了 chan request 和 chan parserResult
3,简单调度器的工作就是,
①把大量的request请求,发送到 chan request里
②之后goroutine里会接收chan request里的数据传达给worker工作,生成大量的parserResult 并把这些parserResult发送到 chan parserResult里。
③最后,外围有个地方会不停的接收来自chan parserResult的数据,来进行最后编译。
再说下队列实现调度器
1,要先开很多的worker,这时候就初次用到了goroutine
2,要往createWorker这个goroutine里传数据,就利用到了channel
由于实际工作者是worker,这时候定义了 chan request 和 chan parserResult(到这里为止是一样的)
3,队列调度器的工作是,
①把大量的request请求,发送到 chan request里
②chan request里的请求先不去分配工作,而是由队列 []Request进行接收
③func (s *QueuedScheduler) WorkerChan() chan engine.Request { return make(chan engine.Request) }
的意义不太理解
④workerChan chan chan engine.Request
存在意义不太理解
⑤var workerQ []chan engine.Request
这个队列又是要做什么的
总体来说,有了chan request已经够了,为什么又多了workerChan 这里没太懂。是想把createrWorker也用队列来管理是吧?
⑥之后goroutine里会接收workerChan里的数据传达给worker工作,生成大量的parserResult 并把这些parserResult发送到 chan parserResult里。
⑦最后,外围有个地方会不停的接收来自chan parserResult的数据,来进行最后编译。
上述内容有点偏长,可能问题阐述的也不是很明确。希望老师能给讲解一下其中的原理。