gpt4 book ai didi

erlang - 远程节点、组长和打印输出

转载 作者:行者123 更新时间:2023-12-04 17:02:22 25 4
gpt4 key购买 nike

给定两个 Erlang 节点,“foo@host”和“bar@host”,下面会在“foo”上产生一个打印输出:

(foo@host) rpc:call('bar@host', io, format, ["~p", [test]]).

虽然在“bar”上打印出以下内容:
(foo@host) rpc:call('bar@host', erlang, display, [test]).

即使 erlang:display/1应该仅用于调试,两个函数都应该将内容发送到标准输出。每个进程都应该从其父进程继承组长,所以我希望这两个函数的行为方式一致。

上述行为有什么理由吗?

最佳答案

造成这种行为差异的原因是输出在哪里以及由谁完成:

  • erlang:display/1是一个 BIF 并由 BEAM 直接处理,BEAM 将其直接写入其标准输出,而无需靠近 Erlang 的 io 系统。所以在 bar 上这样做结果打印到 bar的标准输出。
  • io:format/1/2由 Erlang io 系统处理。如无 IoDevice已经给它发送一个 io 请求给它的组长。 rpc:call/4远程生成的进程继承了执行 RPC 调用的进程的组长。所以输出到调用进程的标准输出。所以在 foo 上做一个 RPC 调用到节点 bar结果输出到 foo的标准输出。

  • 因此差异。有趣的是,在 Erlang io-system 中不需要对此进行特殊处理,一旦设置了组长,它就会透明地工作。

    关于erlang - 远程节点、组长和打印输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12491607/

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