Has*_*yed 4 erlang multithreading portability asynchronous ipc
我需要回答以下问题,以帮助理解我应该采取什么方法来与Erlang交互.SMP UNIX机箱上的AFAIK Erlang使用多进程方法.在这种情况下,它应该做同一台机器IPC.
它是否使用命名管道的窗口?
如果它没有实现上面的两个结构 - 即没有用于windows的命名管道; 它必须要回退到Windows上的套接字.
如何实现上述原则,它们是使用面向消息的,每个通道的单线程,异步构造还是其他什么?
如果上面的推理路线不正确,它是否使用主子树,所有其他进程间接通过主机进行通信?
- 编辑1 -
链接到erlang二进制格式文档.
普遍的共识是Unix Domain Sockets优于TCP/IP.我想我会尝试扩展Erlang以使用提供的更好的原语.我也强烈怀疑在TCP/IP事件循环中没有使用epol和windows IOPC - 我会在审核代码后回发.
断言Erlang的另一个SO帖子确实不支持TCP和UDP以外的任何其他内容.
有用于通信的两个二郎库Erlang node -> c_node和c_node -> Erlang_node
rvi*_*ing 13
作为对您原始问题和一些评论的评论:
我非常确定,事实上我知道,在节点内部,Erlang VM不使用套接字或管道来进行(Erlang)进程之间的通信.这将是荒谬的,完全违背轻量级间(Erlang)过程通信的基本Erlang原则.
在Erlang节点之间,Erlang VM使用TCP/IP.从Erlang看到的语义和行为与节点内通信相同,在大多数方面,它涉及所涉及的进程所在的节点是完全透明的.
无论使用多少核心和调度程序,SMP都不会更改这些基础知识,无论每个核心运行多少个调度程序.
R1。它使用 TCP/IP(事实上,没有任何对 UNIX 域套接字的“标准”支持)
R2。我很确定它仍然是 TCP/IP 套接字
R3。见R2
R4。Erlang 有一种适合的二进制交换格式,并且它是基于消息的。交换可以是同步的(类似 RPC)或异步的。
R5。无师父。
作为奖励(帮助您节省时间):不要忘记使用注册名称(-sname 或 -name)以便使用节点间通信(RPC 或其他)。