gpt4 book ai didi

multithreading - Erlang BEAM 机器的减少

转载 作者:行者123 更新时间:2023-12-04 18:04:54 27 4
gpt4 key购买 nike

Erlang是一种著名的编程语言(除其他外)
因为它是轻量级线程。 Erlang 通常使用 BEAM machine 实现.
Erlang BEAM 机器的描述 (H'97) 说

To guarantee a fair scheduling a process is suspended after a fixed number of reductions and then the first process from the queue is resumed.



我对这种减少的概念很感兴趣。根据 (H'97),只有以下 BEAM 命令算作减少:
  • C/CO/ResC : 调用本地/常驻 Erlang 函数
  • CL : 丢弃当前堆栈帧。调用本地 Erlang 函数。
  • CEx/TrCEx : 调用外部 Erlang 函数(跟踪或其他方式)。
  • CExL/TrCExL : 丢弃当前堆栈帧并调用外部 Erlang 函数(跟踪或其他方式)。
  • M_C_r : 加载参数寄存器 x(0)。调用常驻 Erlang 函数。
  • M_CL_r : 加载参数寄存器 x(0)。丢弃当前堆栈帧。调用本地 Erlang 函数。

  • 所有这些都涉及函数调用。
    相比之下,调用 C 函数(例如 TrC/TrCO )和调用内置函数(例如由 Bif_0_ 调用)不算作
    减少。

    问题。 在这个序言之后,这是我想知道的。
  • 为什么减少用于线程之间的调度,而不是时间片?
  • 为什么只有上述命令使减少计数器前进?
  • (H'97) 中的描述有点过时了,当代 Erlang 如何处理调度?


  • (H'97) B. Hausman, The Erlang BEAM Virtual Machine Specification .

    最佳答案

    我只知道第一个问题的答案:

  • 时间片不一定在所有平台和操作系统上都是准确的;使用减少可确保所有环境中的行为一致
  • 关于multithreading - Erlang BEAM 机器的减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31751766/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com