对于 QueuedScheduler,我认为它实现了两层解耦,一层是外部的,一层是内部的。
外部解耦是指通过两个 Queue 完成了 request 和 worker 之间的缓存与通信。内部解耦是指它通过 requestChan 和 workerChan 这两个private property(姑且这么称呼)外加 Submit() 和 WorkerReady() 这两个 public method,实现了对两个 Queue 操作的解耦。 这种方式可以更方便地、并发地对接收到的 request 和 worker channel 进行更复杂的处理。(虽然在QueueScheduler 这个例子里的操作只是向两个 Queue 中 append 数据,不会因消耗太多的资源而发生阻塞)
我在学习这部分的时候是先尝试理解外部的解耦:忽略掉两个 private property,把 Submit() 和 WorkerReady() 认为单纯的 queue append 操作,这样就不存在 select 的轮询操作,代码看上去就更加简洁易理解。之后再进一步完成 scheduler 的内部解耦。
不知我这样理解是否正确,望老师和同学指正。