关于workerQ队列的问题

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

weibo_北桥_03164202

2020-06-10

老师好,select的时候第三个case 会把workerQ里面的第一个worker消除掉,但是 creatWorker 的次数是根据ConcurrentEngine里面的WorkerCount 属性,100的话 for循环一百次,等于创建100worker 放在workerQ,但是Quest的数量是不固定的,每一次Submit 就会放一个request进入requestQ中,两个数量不对等,怎么会运行成功呢

写回答

1回答

ccmouse

2020-06-10

这里每次都把requestQ中的第一个任务,发给workerQ中的第一个worker。这样的逻辑并不需要worker和request数量对等。一般requestQ会比较大,那么来不及分配的任务就等在那里排队,等排到第一个,并且有空的worker,就会被执行。

0
2
ccmouse
回复
weibo_北桥_03164202
每个worker在做完工作之后会把自己通过channel传回给main goroutine。可以在这里select看到有往workerQ添加项目
2020-06-11
共2条回复

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

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

5995 学习 · 1909 问题

查看课程