proc_lib:spawn和rpc:erlang之间的区别

时间:2016-03-12 12:03:10

标签: erlang

你能告诉我哪一个最好吗?在我的应用程序中,我需要确保我们实现最高的吞吐量。

2 个答案:

答案 0 :(得分:1)

看看两者的文档,它几乎可以回答你的问题。

  1. proc_lib:spawn_link/4
  2. 它在远程节点上生成一个新进程并返回该进程的pid()。它还将本地进程与刚刚生成的远程进程相链接。然后,新进程将异步调用riak_kv_put_fsm:start_link/3,即本地节点上的代码继续执行,并且不会等待远程节点上riak_kv_put_fsm:start_link/3的调用结果。但是,如果出现问题,远程进程将崩溃 - 并且由于这两个进程是链接的,因此本地进程将从远程节点上生成的进程收到'EXIT'消息。有关处理'EXIT'消息的详细信息,请参阅Error Handling手册。

    如果一切顺利,以spawn_link开始的流程执行最终将结束。但是,当进程停止执行时,调用riak_kv_put_fsm:start_link/3的结果也将丢失。您需要让远程节点通知本地节点,riak_kv_put_fsm:start_link/3的呼叫已成功,并且现在已准备好接受来自本地或其他节点的呼叫。

    1. rpc:call/4
    2. 它同步处理调用,即本地进程进行调用并等待,直到它收到来自远程节点的响应。如果在调用期间出现问题,该函数将返回错误。它不会导致进程崩溃,直到远程功能出现错误而无法正常处理。

      总结一下,使用proc_lib:spawn_link/4的异步调用在远程节点上会慢一些(因为它会产生一个额外的进程并创建链接),但它在本地节点上会更快(因为它没有& #39; t需要等待调用的结果并且可以继续执行)。同步调用似乎更容易理解,测试和实现。决定权归你所有。

答案 1 :(得分:0)

Amirax指出了主要的差异。请注意,您也可以使用rpc:async_call/4并稍后获取结果。

最终:建立并衡量,改进和再次衡量。