- request和work chan 都是chan,run里面的slice其实是为了方便调度器select做的“缓存”,其实维护的“队列”本意应该是维护channel,对吧?
- engine中创建worker,给每个worker的输入链接为workchan(创建一个chan类型的engine.Request),有多少个worker就创建多少个workchan,这些workchan,当有request来的时候,就将request注入到workChan中,这也就是为什么workerChan是一个
chan chan engine.Request
的类型,因为他接收的类型是 chan request。
- 当有request从worker获取的时候,scheduler将从request chan收到的request,再将request从worker chan发到worker去执行。
这样通过scheduler的调度器(goroutine)通过request和workchan,两个slices进行了异步调控。
以上是我对本章scheduler版本的spider的总结
go func(){
for{
...
}
}()
在goroutine里面有一个for的循环,这样的写法是一个特定的语法吗?还是这是带有channel的goroutine的常用模式?