作者:mobiledu2502916813 | 来源:互联网 | 2023-05-19 20:09
好的,这是我今天一直在考虑的问题(如果我手头没有得到答案,我将在下周测试).
我有许多Erlang进程,我需要传递大型二进制文件.我一直在做的是使用gproc:send来定位并将二进制文件发送到适当的进程.但是,我不是只发送一个二进制文件,我通常发送一个元组,如"{self(),atom,Msg\binary}".起初我认为这足以满足大型二进制文件的消息处理要求,以避免内存复制操作.
8.2处理消息
Erlang进程之间的消息中的所有数据都被复制,但同一个Erlang节点上的refc二进制文件除外.
来自:Erlang效率指南
然而,现在我开始怀疑,如果消息处理器/编译器/等会理解那里有> 64k二进制文件?或者它会看到元组,只是想想,让我们将整个事情复制到另一个过程中?就像我指出的那样,我计划下周进行测试,看看,我很乐意用我的发现更新帖子.
我正在使用R16B03-1.
谢谢!
1> Steve Vinosk..:
大小大于或等于64字节的二进制文件存储在共享区域中并被引用计数,因此它们不会在进程之间复制; 只复制对它们的引用.