This commit is contained in:
xin zhao
2018-05-25 06:42:57 +08:00
committed by 无闻
parent d0bd3ca8f7
commit 5eced65179

View File

@@ -34,7 +34,7 @@ func Worker(pool *Pool) {
} }
``` ```
这些worker有许多都可以并发执行他们可以在go协程中启动。一个worker先将pool锁定从pool获取第一项任务再解锁和处理任务。加锁保证了同一时间只有一个go协程可以进入到pool中一项任务有且只能被赋予一个worer。如果不加锁则工作协程可能会在`task:=pool.Task[0]`发生切换,导致`pool.Tasks=pool.Task[1:]`结果异常一些worker获取不到任务而一些任务可能被多个worker得到。加锁实现同步的方式在工作协程比较少时可以工作的很好但是当工作协程数量很大任务量也很多时处理效率将会因为频繁的加锁/解锁开销而降低。当工作协程数增加到一个阈值时,程序效率会急剧下降,这就成为了瓶颈。 这些worker有许多都可以并发执行他们可以在go协程中启动。一个worker先将pool锁定从pool获取第一项任务再解锁和处理任务。加锁保证了同一时间只有一个go协程可以进入到pool中一项任务有且只能被赋予一个worker。如果不加锁则工作协程可能会在`task:=pool.Task[0]`发生切换,导致`pool.Tasks=pool.Task[1:]`结果异常一些worker获取不到任务而一些任务可能被多个worker得到。加锁实现同步的方式在工作协程比较少时可以工作的很好但是当工作协程数量很大任务量也很多时处理效率将会因为频繁的加锁/解锁开销而降低。当工作协程数增加到一个阈值时,程序效率会急剧下降,这就成为了瓶颈。
新模式:使用通道 新模式:使用通道