同一台机器Erlang通信

Has*_*yed 4 erlang multithreading portability asynchronous ipc

我需要回答以下问题,以帮助理解我应该采取什么方法来与Erlang交互.SMP UNIX机箱上的AFAIK Erlang使用多进程方法.在这种情况下,它应该做同一台机器IPC.

  1. Erlang是否为UNIX使用UNIX域套接字?
  2. 它是否使用命名管道的窗口?

  3. 如果它没有实现上面的两个结构 - 即没有用于windows的命名管道; 它必须要回退到Windows上的套接字.

  4. 如何实现上述原则,它们是使用面向消息的,每个通道的单线程,异步构造还是其他什么?

  5. 如果上面的推理路线不正确,它是否使用主子树,所有其他进程间接通过主机进行通信?

- 编辑1 -

链接到erlang二进制格式文档.

普遍的共识是Unix Domain Sockets优于TCP/IP.我想我会尝试扩展Erlang以使用提供的更好的原语.我也强烈怀疑在TCP/IP事件循环中没有使用epol和windows IOPC - 我会在审核代码后回发.

断言Erlang的另一个SO帖子确实不支持TCP和UDP以外的任何其他内容.

有用于通信的两个二郎库Erlang node -> c_nodec_node -> Erlang_node

套接字的Erlang 模块允许在UNIX下打开Unix Dom套接字.

rvi*_*ing 13

作为对您原始问题和一些评论的评论:

  • 非常确定,事实上我知道,在节点内部,Erlang VM不使用套接字或管道来进行(Erlang)进程之间的通信.这将是荒谬的,完全违背轻量级间(Erlang)过程通信的基本Erlang原则.

  • 在Erlang节点之间,Erlang VM使用TCP/IP.从Erlang看到的语义和行为与节点内通信相同,在大多数方面,它涉及所涉及的进程所在的节点是完全透明的.

  • 无论使用多少核心和调度程序,SMP都不会更改这些基础知识,无论每个核心运行多少个调度程序.


jld*_*ont 0

R1。它使用 TCP/IP(事实上,没有任何对 UNIX 域套接字的“标准”支持)

R2。我很确定它仍然是 TCP/IP 套接字

R3。见R2

R4。Erlang 有一种适合的二进制交换格式,并且它是基于消息的。交换可以是同步的(类似 RPC)或异步的。

R5。无师父。


作为奖励(帮助您节省时间):不要忘记使用注册名称(-sname 或 -name)以便使用节点间通信(RPC 或其他)。

  • 每个节点都有自己的调度程序。我也不知道为什么我们在这里讨论调度程序。 (3认同)