Erlang C端口 - 串行还是并行执行?

时间:2015-04-25 09:04:39

标签: erlang erlang-ports

Erlang ports and thread safety

“然而,对于端口,”控制过程“充当序列化(如在一系列中排列)层,意味着请求是一个接一个地处理而不是一次处理。此外,我相信(但不要通知协议端口使用也需要这个串行执行。“

如果我启动了大量的Erlang端口进程,每个进程连接到同一个C驱动程序,是否有人知道C代码是由并行Erlang进程串行还是并行执行的? (我在系列中怀疑)

THX

1 个答案:

答案 0 :(得分:1)

Erlang只通过端口描述程序通信,而不是代码执行。虽然您有一个序列化点,并且所有通信都通过一个参与者,但这并不意味着您无法分发一般的工作。即使使用单个端口,也可以根据需要并行C程序。

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

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

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