Concurrency 了解罗布·派克';s图书焚化实例
在罗伯·派克(Rob Pike)2012年的演讲中,他列举了一群地鼠一起焚烧一堆书的例子 在幻灯片15()中,有三只地鼠在工作:Concurrency 了解罗布·派克';s图书焚化实例,concurrency,go,parallel-processing,Concurrency,Go,Parallel Processing,在罗伯·派克(Rob Pike)2012年的演讲中,他列举了一群地鼠一起焚烧一堆书的例子 在幻灯片15()中,有三只地鼠在工作: 把书从一堆装进手推车的人 将装满的垃圾车移动至焚烧炉(随后将空垃圾车返回) 把书从手推车里搬进焚化炉的人 在上,四只地鼠正在一起解决同一个问题: 把书从一堆装进手推车的人(和以前一样) 将装填好的推车移到焚烧炉的人 把书从手推车里搬进焚化炉的人(和以前一样) 一个是把空车移回垃圾堆 派克说,这执行更多的工作,但会运行得更快。为什么?这似乎是相同的工作量,由更多的地
派克说,这执行更多的工作,但会运行得更快。为什么?这似乎是相同的工作量,由更多的地鼠分担。假设是,携带装载的小车的地鼠在从小车中取出书籍后,必须进行某种清理或通信。现在,当另一只地鼠背着空马车回来时,它就可以这样做了。因此,装载的地鼠不必等待马车回来的时间那么长。考虑一次马车装载的往返行程 在第一种情况下,我们有:
- 将装满的垃圾车移动至焚烧炉(随后将空垃圾车返回)
- 地鼠1:将装满的推车移到焚烧炉
- 地鼠1:把空车移回堆里
- 将装填好的推车移到焚烧炉的人
- 一个是把空车移回垃圾堆
- 地鼠1:将装满的推车移到焚烧炉
- 地鼠1:没有手推车,走回堆里
- 地鼠2:把空车移回堆里
- 地鼠2:没有手推车,走回焚烧炉
诀窍在于不只是一辆车,还有多辆车。一个被填充,一个被移到焚烧炉,一个被倒进焚烧炉,一个被从焚烧炉移回。这意味着每只地鼠都应该(只要工作正常,每项任务的完成时间相对相似)总是很忙。可能假设第一只地鼠有时必须等待购物车返回才能开始填充,添加另一只地鼠将确保在第一个插槽中始终有一辆车。在我看来,这不是一个非常以程序员为中心的例子,所以最好不要想太多;)@Jonathanhedborg仍然只有一辆车。即使有两个cart,也不可能始终有一个空的cart可用。谢谢,但我不知道专门化如何应用于线程(Gopher代表什么)。@espertus:code cache locality。较小的(专用的)代码缓存在正在运行的CPU附近it@MichaelDeardeuff它可以以另一种方式工作,在一个处理器上运行多个线程,相互碰撞']@Michaeldearduff它可以以任何一种方式工作,使用相同缓存的多个线程相互碰撞。无论如何,