假设我在 Erlang 应用程序中创建新的本地进程,并且我想向它发送一条大消息。
-module(chain_hello).
start(N, Some_big_data)->
Pid1 = spawn(chain_hello, some_fun, [N]),
Pid1 ! Some_big_data,
io:format("done \n").
despite Some_big_data
是对真正大数据的引用(例如文件的内容) - 发送时是否复制?性能有很大的惩罚吗?
通常我会使用一些线程安全的共享对象(和/或互斥体)。 Erlang中有什么解决方案可以避免复制消息内容吗?
ADDED:
有趣的情况是,当 Some_big_data 是结构化内容时 - 具体来说:地图,我可以在其上执行一些操作。
ADDED2
好吧,我发现 Erlang 没有这样的解决方案(在工作进程中共享一些结构化数据,例如地图) - 由于 Erlang 设计。但我认为这是通过扎实的工作和轻松的并发管理来证明的。
来自Erlang 效率指南:
Erlang 之间消息中的所有数据
过程被复制,与
例外参考二进制文件一样的
Erlang 节点。
是的,您应该避免在进程之间发送大术语。如果需要发送大量数据,请以二进制形式发送。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)