Erlang C 端口 - 串行或并行执行?

Erlang C port - serial or parallel execution?

"With ports, however, the "controlling process" 充当序列化(如在一系列中排列)层,这意味着请求一个接一个地处理,而不是一次处理。此外,我相信(但不知道当然)通信协议端口使用也需要这个串行执行。"

如果我启动大量 Erlang 端口进程,每个进程都连接到同一个 C 驱动程序,有谁知道 C 代码将由并行 Erlang 进程串行执行还是并行执行? (我怀疑是串联的)

感谢

Erlang 仅通过端口描述程序通信,而不是代码执行。虽然你有一个序列化点并且所有通信都通过一个演员进行,但这并不意味着你不能在一般情况下分发作品。即使只有一个端口,您也可以随心所欲地并行您的 C 程序。

端口被实现为管道,这就是它需要串行通信的原因。但是你可以自由地打开很多通信管道,所有这些管道都完全独立于彼此工作。

这意味着你的不同端口将是独立的,所有通过独立端口的通信将是并行的

然而,beam 对运行代码的线程池的能力有限。每个与端口的通信事件都将使用线程进行数据传输。如果您有很多端口并发送大量数据,这个时间可能会变得很重要,因此端口将开始相互影响。在这种情况下,您可能需要增加用于 IO 和端口通信的 异步线程 的数量