Erlang ports and thread safety
然而,对于端口,“控制进程”充当序列化(如在一个序列中排列)层,意味着请求是一个接一个地处理,而不是全部处理。此外,我认为(但不确定)通信协议端口使用的通信协议也需要串行执行。
如果我启动大量的Erlang端口进程,每个进程都连接到同一个C驱动程序上,有人知道C代码是由并行Erlang进程串联还是并行执行的吗?(我怀疑是串联的)
Thx
发布于 2015-04-25 10:09:10
Erlang只描述通过端口进行的程序通信,而不是代码执行。虽然您有一个序列化点,并且所有的通信都通过一个参与者,但这并不意味着您不能分发一般的工作。您可以根据自己的意愿并行C程序,即使使用单个端口也是如此。
端口是作为管道实现的,这就是为什么它需要串行通信。但是你可以自由地打开很多通讯管道,它们都完全独立地工作。
这意味着您的不同端口将是独立的,所有通过独立端口进行的通信都将是并行的。
Hovewer,beam对代码运行的线程池的功率有限。每个具有端口的通信事件都将使用线程作为数据传输的时间。如果您有很多端口,并发送了大量数据,这一次可能会变得重要,因此端口将开始相互影响。在这种情况下,您可能需要增加异步线程的数量,wich用于IO和端口通信。
https://stackoverflow.com/questions/29863189
复制相似问题