erlang - 分布式Erlang发送大消息有哪些性能特点?

标签 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").

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

通常我会使用一些线程安全的共享对象(和/或互斥体)。 Erlang中有没有解决方案可以避免复制消息内容?

添加:
有趣的情况是,当 Some_big_data 是结构化内容时 - 具体来说: map ,我可以在其上执行一些操作。

添加2
好吧,我发现 Erlang 没有这样的解决方案(在工作进程中共享一些结构化数据,例如 map ) - 由于 Erlang 设计。但我认为这是通过扎实的工作和轻松的并发管理来证明的。

最佳答案

来自Erlang Efficiency Guide :

All data in messages between Erlang processes is copied, with the exception of refc binaries on the same Erlang node.

是的,您应该避免在进程之间发送大术语。如果您需要发送大量数据,请以二进制形式发送。

关于erlang - 分布式Erlang发送大消息有哪些性能特点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5394566/

相关文章:

c++ - Erlang - 向 UDP 多播 session 发送消息

erlang - 单个宏中的多个语句

erlang - 如何设置 Yaws yapp?

centos - rabbitmq-server 安装 CentOS - Erlang 错误

http - 怎么用httpc做POST/GET/HEAD?

oop - Erlang 中的进程/消息和 Smalltalk 中的对象/消息有什么区别?

xml - 我如何在 Erlang 中对字符串进行 XML 编码?

erlang - 使用 Yaws 和 websockets 订阅数据

erlang - 为什么这个模式不匹配

erlang - 可以 mock 模拟 erlang :exit?