Concurrency 了解罗布·派克';s图书焚化实例

Concurrency 了解罗布·派克';s图书焚化实例,concurrency,go,parallel-processing,Concurrency,Go,Parallel Processing,在罗伯·派克(Rob Pike)2012年的演讲中,他列举了一群地鼠一起焚烧一堆书的例子 在幻灯片15()中,有三只地鼠在工作: 把书从一堆装进手推车的人 将装满的垃圾车移动至焚烧炉(随后将空垃圾车返回) 把书从手推车里搬进焚化炉的人 在上,四只地鼠正在一起解决同一个问题: 把书从一堆装进手推车的人(和以前一样) 将装填好的推车移到焚烧炉的人 把书从手推车里搬进焚化炉的人(和以前一样) 一个是把空车移回垃圾堆 派克说,这执行更多的工作,但会运行得更快。为什么?这似乎是相同的工作量,由更多的地

在罗伯·派克(Rob Pike)2012年的演讲中,他列举了一群地鼠一起焚烧一堆书的例子

在幻灯片15()中,有三只地鼠在工作:

  • 把书从一堆装进手推车的人
  • 将装满的垃圾车移动至焚烧炉(随后将空垃圾车返回)
  • 把书从手推车里搬进焚化炉的人
  • 在上,四只地鼠正在一起解决同一个问题:

  • 把书从一堆装进手推车的人(和以前一样)
  • 将装填好的推车移到焚烧炉的人
  • 把书从手推车里搬进焚化炉的人(和以前一样)
  • 一个是把空车移回垃圾堆

  • 派克说,这执行更多的工作,但会运行得更快。为什么?这似乎是相同的工作量,由更多的地鼠分担。

    假设是,携带装载的小车的地鼠在从小车中取出书籍后,必须进行某种清理或通信。现在,当另一只地鼠背着空马车回来时,它就可以这样做了。因此,装载的地鼠不必等待马车回来的时间那么长。

    考虑一次马车装载的往返行程

    在第一种情况下,我们有:

    • 将装满的垃圾车移动至焚烧炉(随后将空垃圾车返回)
    即:

    • 地鼠1:将装满的推车移到焚烧炉

    • 地鼠1:把空车移回堆里

    在第二种情况下,我们有:

    • 将装填好的推车移到焚烧炉的人

    • 一个是把空车移回垃圾堆

    即:

    • 地鼠1:将装满的推车移到焚烧炉

    • 地鼠1:没有手推车,走回堆里

    • 地鼠2:把空车移回堆里

    • 地鼠2:没有手推车,走回焚烧炉

    虽然我们有额外的工作,但由于几个原因,例如分工,它可能运行得更快

    劳动分工

    因此,以一个微不足道的制造业为例 劳动分工经常被注意到的一个领域 当然,别针制造商的行业:没有受过这种行业教育的工人 (劳动分工使其成为一种独特的行业),也 熟悉其所用机械的使用(至 同样的劳动分工可能产生的发明 也许,凭借他最大的勤奋,他很难做到这一点 一天之内,肯定赚不到二十英镑。但是在路上 这项业务现在正在进行,不仅整个工作是 独特的贸易,但它分为若干分支,其中 大部分也是特殊行业。一个男人抽出一只手 电线;另一个可以让它变直;第三种方法是削减成本;第四点是它;A. 第五个在顶部研磨它以接收头部;出头 需要两个或三个不同的操作;穿上它是一件奇特的事 业务;把大头针涂成白色是另一回事;它本身甚至是一种贸易 把它们写在纸上;还有制作别针的重要业务 以这种方式分为大约18个不同的操作, 在一些制造厂,这些都是由不同的人完成的, 虽然在其他人身上,同一个人有时会表演两三次 他们。我见过这样一家小工厂,那里只有十个人 他们中的一些人因此执行了两次或两次以上的任务 三种不同的操作。尽管他们很穷 因此,却冷漠地适应了必要的机械, 当他们努力工作的时候,他们可以在他们中间创造大约十二个 一天有好几磅大头针。一磅有四千英镑以上 中等大小的别针。因此,这十个人可以 其中一天超过四万八千针。每个人, 因此,制作四万八千枚针的十分之一,可能是 被认为是一天制造四千八百枚大头针。但如果 他们都是各自独立地工作的,没有一个人 他们受过这种特殊的教育,他们当然 他们不可能一天都做了二十枚,也许一枚也做不到; 那当然不是第二百四十个,也许不是第二个 四千八百分之一,是目前的一部分 由于适当的划分和 他们的不同操作的组合


    诀窍在于不只是一辆车,还有多辆车。一个被填充,一个被移到焚烧炉,一个被倒进焚烧炉,一个被从焚烧炉移回。这意味着每只地鼠都应该(只要工作正常,每项任务的完成时间相对相似)总是很忙。

    可能假设第一只地鼠有时必须等待购物车返回才能开始填充,添加另一只地鼠将确保在第一个插槽中始终有一辆车。在我看来,这不是一个非常以程序员为中心的例子,所以最好不要想太多;)@Jonathanhedborg仍然只有一辆车。即使有两个cart,也不可能始终有一个空的cart可用。谢谢,但我不知道专门化如何应用于线程(Gopher代表什么)。@espertus:code cache locality。较小的(专用的)代码缓存在正在运行的CPU附近it@MichaelDeardeuff它可以以另一种方式工作,在一个处理器上运行多个线程,相互碰撞']@Michaeldearduff它可以以任何一种方式工作,使用相同缓存的多个线程相互碰撞。无论如何,