假设我在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设计.但我认为通过扎实的工作和轻松的并发管理是合理的.
来自Erlang效率指南:
Erlang进程之间的消息中的所有数据都被复制,但同一Erlang节点上的refc二进制文件除外.
是的,您应该避免在流程之间发送大的条款.如果需要发送大量数据,请将其作为二进制文件发送.
| 归档时间: |
|
| 查看次数: |
2057 次 |
| 最近记录: |