假设我在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设计.但我认为通过扎实的工作和轻松的并发管理是合理的.
有人可以解释嵌套在泛型中的结构类型的奇怪结构:
implicit def Function1Functor[R]: Functor[({type ?[?]=(R) => ?})#?] =
new Functor[({type ?[?]=(R) => ?})#?] ....
Run Code Online (Sandbox Code Playgroud)
此示例来自Scalaz库:Functor.scala
为什么需要这种结构呢?写起来并不简单:
implicit def Function1Functor[R,A]: Functor[R =>A]
Run Code Online (Sandbox Code Playgroud)
要么
implicit def Function1Functor[R,A]: Functor[Function1[R,A]]
Run Code Online (Sandbox Code Playgroud) 我在标准的emacs-nox和emacs-gtk中找到了很大的区别.我知道emacs控制台版本(emacs-nox)有些键有问题(例如Shift-Tab - ),但是没有PageDown.
当我有空的.emacs文件,并尝试识别由PageDown键运行的命令名(由Ch c)时,emacs-nox emacs-gtk正常工作 - 推送PageDown进行向上滚动,并且Ch c PageDown打印在迷你缓冲区中向上滚动.
当我尝试绑定"M- ["键时出现问题.在.emacs我只有一个声明:
(global-set-key (kbd "M-[") 'hippie-expand)
Run Code Online (Sandbox Code Playgroud)
emacs-nox无法识别按键运行的命令名称 - 当Ch c PageDown,insted wriets缓冲"~6"时,它不会在迷你缓冲区中打印.当我尝试Chk PageDown时,我得到:M- [运行命令hippie-expand
emacs-gtk工作正常 - 推送PageDown进行向上滚动,Chc PageDown打印向上滚动迷你缓冲区.
所以我想emacs nox将PageDown视为M- [并添加额外的东西.
知道如何在emacs-nox中解决这个问题吗?
我使用emacs v23.2
编辑:
我测试了其他案例:在.emacs我只有:(global-set-key(kbd"")'hippie-expand)和Ch c PageDown和Ch k PageDown都能正常工作(打印嬉皮 - 扩展),以及何时在缓冲区我推PageDown也很好用.
有没有办法在不使用的情况下为大数组声明和保留空间table.insert?像Python中的东西:
a = [0]*10000
Run Code Online (Sandbox Code Playgroud)
或在C:
malloc(10000*sizeof(int))
Run Code Online (Sandbox Code Playgroud)