Erlang消息传递大型二进制文件,优化性能建议

Old*_*ool 1 erlang

好的,这是我今天一直在考虑的问题(如果我手头没有得到答案,我将在下周测试).

我有许多Erlang进程,我需要传递大型二进制文件.我一直在做的是使用gproc:send来定位并将二进制文件发送到适当的进程.但是,我不是只发送一个二进制文件,我通常发送一个元组,如"{self(),atom,Msg\binary}".起初我认为这足以满足大型二进制文件的消息处理要求,以避免内存复制操作.

8.2处理消息

Erlang进程之间的消息中的所有数据都被复制,但同一个Erlang节点上的refc二进制文件除外.

来自:Erlang效率指南

然而,现在我开始怀疑,如果消息处理器/编译器/等会理解那里有> 64k二进制文件?或者它会看到元组,只是想想,让我们将整个事情复制到另一个过程中?就像我指出的那样,我计划下周进行测试,看看,我很乐意用我的发现更新帖子.

我正在使用R16B03-1.

谢谢!

Ste*_*ski 8

大小大于或等于64字节的二进制文件存储在共享区域中并被引用计数,因此它们不会在进程之间复制; 只复制对它们的引用.