erlang - 发送大消息性能

Rob*_*mba 3 erlang

假设我在erlang应用程序中创建了新的本地进程,我想向它发送一条重要消息.

-module(chain_hello). 

start(N, Some_big_data)->                                    
   Pid1 = spawn(chain_hello, some_fun, [N]),
   Pid1 ! Some_big_data,
   io:format("done \n").
Run Code Online (Sandbox Code Playgroud)

尽管Some_big_data是对真正大数据的引用(例如文件的内容) - 它在发送时是否被复制?对性能有很大的惩罚吗?

通常我会使用一些线程安全的共享对象(和/或互斥).Erlang中是否有任何解决方案可以避免复制邮件内容?

增加:
有趣的情况是Some_big_data是结构化内容 - 具体:map,我可以在其上执行某些操作.

ADDED2
好的,我看到Erlang没有这样的解决方案(剪切一些结构化数据,比如工作流程中的map) - 因为Erlang设计.但我认为通过扎实的工作和轻松的并发管理是合理的.

Ada*_*erg 6

来自Erlang效率指南:

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

是的,您应该避免在流程之间发送大的条款.如果需要发送大量数据,请将其作为二进制文件发送.