Chi*_*ron 4 concurrency erlang future promise
Erlang是否具有Future和Promises的等价物?或者因为未来和承诺正在解决Erlang系统中不存在的问题(例如同步编排),因此我们在Erlang中不需要它们.
如果我想在Erlang中使用期货和承诺的语义,可以通过Erlang进程/演员来模拟它们吗?
您可以像这样在Erlang中轻松实现未来:
F = fun() -> fancy_function() end,
% fancy code
Pid = self(),
Other = spawn(fun() -> X = F(), Pid ! {future, self(), X} end).
% more fancy code
Value = receive {future, Other, Val} -> Val end.
Run Code Online (Sandbox Code Playgroud)
在模块中使用此功能并从中构建链也应该很容易,但说实话,我从来没有真正错过这样的东西.如果您只是自由发送消息,您会更灵活.
RPC模块包含执行所需操作的rpc:async_call/4功能.它将在集群中的任何位置运行计算(包括on node(),本地节点),并允许等待结果rpc:yield/1:
1> MaxTime = rpc:async_call(node(), timer, sleep, [30000]).
<0.48.0>
2> lists:sort([a,c,b]).
[a,b,c]
3> rpc:yield(MaxTime).
... [long wait] ...
ok
Run Code Online (Sandbox Code Playgroud)
您还可以使用rpc:nb_yield/1或以有限的毫秒数以非阻塞方式轮询rpc:nb_yield/2:
4> Key2 = rpc:async_call(node(), timer, sleep, [30000]).
<0.52.0>
5> rpc:nb_yield(Key2).
timeout
6> rpc:nb_yield(Key2).
timeout
7> rpc:nb_yield(Key2).
timeout
8> rpc:nb_yield(Key2, 1000).
timeout
9> rpc:nb_yield(Key2, 100000).
... [long wait] ...
{value,ok}
Run Code Online (Sandbox Code Playgroud)
这一切都在标准库中,随时可以使用.
| 归档时间: |
|
| 查看次数: |
1565 次 |
| 最近记录: |