Erlang ports and thread safety
“然而,对于端口,”控制过程“充当序列化(如在一系列中排列)层,意味着请求是一个接一个地处理而不是一次处理。此外,我相信(但不要通知协议端口使用也需要这个串行执行。“
如果我启动了大量的Erlang端口进程,每个进程连接到同一个C驱动程序,是否有人知道C代码是由并行Erlang进程串行还是并行执行的? (我在系列中怀疑)
THX
答案 0 :(得分:1)
Erlang只通过端口描述程序通信,而不是代码执行。虽然您有一个序列化点,并且所有通信都通过一个参与者,但这并不意味着您无法分发一般的工作。即使使用单个端口,也可以根据需要并行C程序。
端口实现为管道,这就是它需要串行通信的原因。但你可以自由地打开很多通信管道,所有这些通信管道彼此完全独立。
这意味着您的不同端口将是独立的,并且通过独立端口的所有通信将是并行的
Hovewer,beam对代码运行的线程池的功率有限。具有端口的每个通信事件将在数据传输时使用线程。如果您有大量端口并发送大量数据,则此时间可能会变得很大,因此端口将开始相互影响。在这种情况下,您可能需要增加异步线程的数量,用于IO和端口通信