代码之家  ›  专栏  ›  技术社区  ›  Aiden Bell

消息的时间顺序

  •  5
  • Aiden Bell  · 技术社区  · 15 年前

    阅读(略读到足够的代码) Erlang Programming Programming Erlang .

    一个简单的问题是:

    如果你有一个过程 Pid1 在机器上 m1 十亿条信息被发送到 PID1 , 消息是由那个进程并行处理的吗(我的印象是没有)和 (回答如下)

    处理消息时是否保证有序?即按顺序接收发送?如果是,在高流量情况下如何处理订购的时钟偏差?

    来自整个C/线程池/共享状态背景…我想要这个混凝土。我了解如何分发应用程序,但希望在构建流程和分发工作负载之前确保“原始骨骼”是我所期望的。

    另外,我是否认为整个世界都在浏览erlang文本;)

    3 回复  |  直到 15 年前
        1
  •  10
  •   cthulahoops    15 年前

    如果进程A向进程B发送两条消息,则保证这两条消息按发送顺序到达。

    如果进程A向进程B发送一条消息,然后向进程C发送一条消息,则无法保证它们的接收顺序。

    同样,如果进程A&B向C发送消息,则无法保证消息的接收顺序。

    这是消息传递模型的一个基本属性不同进程中的计算顺序是未定义的,您只能有意义地谈论涉及消息发送的排序。上述规则的一个结果是,如果a向c发送一条消息,那么a向b发送一条消息,并且在接收到b向c发送的消息时,c可以以任何顺序接收这两条消息。(实际上,我怀疑这不会在单个节点上逆转,但如果这三个进程位于不同的节点上,则很容易发生。)

        2
  •  2
  •   Pointy    15 年前

    消息不是并行处理的;毕竟这只是一个过程。

    至于消息排序:按“时间顺序”(从最早到最新)扫描消息队列。我 认为 我记得很久以前的一次邮件列表讨论,有人澄清,时间戳是邮件的原始时间(即发送时间),但我记不太清楚,也找不到任何关于该邮件的在线引用。

    注意你的 receive 语句可以在传入消息队列的头上执行匹配,这当然会允许接收方从(临时的)顺序中提取传入消息。

        3
  •  1
  •   Abtin Forouzandeh    15 年前

    每个 erlang reference manual :

    [接收]接收发送到进程的消息 使用send运算符(!). The 模式模式是顺序的 与中的第一条消息匹配 邮箱中的时间顺序,然后 第二,等等。

    每个进程对消息进行串行处理。