2

Erlang 端口和线程安全

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

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

谢谢

4

1 回答 1

1

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

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

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

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

于 2015-04-25T10:09:10.453 回答