Erlang 在gen_服务器进程中是否可以通过其Pid调用函数
如果我有一组名为lock的gen服务器,我可以调用一个函数吗Erlang 在gen_服务器进程中是否可以通过其Pid调用函数,erlang,otp,Erlang,Otp,如果我有一组名为lock的gen服务器,我可以调用一个函数吗 hello()-> io:format(“你好,世界!~n”)。 从该gen_服务器的各个进程的Pid,而不是通用的lock:hello()。 我尝试了Pid=(因此,当我在我的主管中启动chld时,Pid将返回),并且Pid:hello()。给出了一个糟糕的论据这是不可能的吗 发送消息而不是调用该函数是更好的主意吗???您可以在任何地方调用函数hello。如果从1000个进程调用它1000次,那么每个进程将并行执行函数,而不会相互干
hello()->
io:format(“你好,世界!~n”)。
从该gen_服务器的各个进程的Pid,而不是通用的lock:hello()。
我尝试了Pid=
(因此,当我在我的主管中启动chld时,Pid将返回),并且Pid:hello()。给出了一个糟糕的论据这是不可能的吗
发送消息而不是调用该函数是更好的主意吗???您可以在任何地方调用函数
hello
。如果从1000个进程调用它1000次,那么每个进程将并行执行函数,而不会相互干扰。您只需从这些进程中的每一个进程调用它,就像调用一个在特定模块lock
中定义并接受零参数的特定函数hello
可能您的问题中没有提到什么?您可以在任何地方调用函数
hello
。如果从1000个进程调用它1000次,那么每个进程将并行执行函数,而不会相互干扰。您只需从这些进程中的每一个进程调用它,就像调用一个在特定模块lock
中定义并接受零参数的特定函数hello
可能您的问题中没有提到什么?您可以调用gen_server:call(Pid,tuplepatternhatchmatchescollback) Erlang中没有Pid:函数API 在这两种情况下,只要您使用gen_server API,调用gen server将序列化调用。但在函数调用中,您可以选择同步应答
如果hello只是放在gen_server模块中(不带gen_server:call),它将在调用进程的上下文中执行,而不是在gen_server one的上下文中执行。您可以调用gen_server:call(Pid,TuplePatternThatMatchesOnCallback) Erlang中没有Pid:函数API 在这两种情况下,只要您使用gen_server API,调用gen server将序列化调用。但在函数调用中,您可以选择同步应答
如果hello只是放在gen_服务器模块中(没有gen_服务器:call),它将在调用进程的上下文中执行,而不是在gen_服务器模块中执行。当您调用gen_服务器模块中的函数时,该函数不会在gen_服务器进程中执行。它在调用进程中执行 如果希望gen_server进程执行某些操作,则应使用gen_server:call或gen_server:cast函数: 例如,gen_server:call/2函数将接受一个pid和一条消息,该消息将与调用一起发送。gen_服务器将在gen_服务器进程中运行其handle_调用功能 通常情况下,您将在定义gen_服务器的同一模块中使用函数来执行gen_服务器:call,以便调用者不必在意。这为其他人创建了一个干净的API,并隐藏了gen_服务器特定的内容 把所有的部分放在一起可能有点棘手,但一旦你做到了,就很简单了。查看LYSE的这一章:
调用gen_服务器模块中的函数时,该函数不会在gen_服务器进程中执行。它在调用进程中执行 如果希望gen_server进程执行某些操作,则应使用gen_server:call或gen_server:cast函数: 例如,gen_server:call/2函数将接受一个pid和一条消息,该消息将与调用一起发送。gen_服务器将在gen_服务器进程中运行其handle_调用功能 通常情况下,您将在定义gen_服务器的同一模块中使用函数来执行gen_服务器:call,以便调用者不必在意。这为其他人创建了一个干净的API,并隐藏了gen_服务器特定的内容 把所有的部分放在一起可能有点棘手,但一旦你做到了,就很简单了。查看LYSE的这一章:
-behaviour(gen_server).
%% gen_server callbacks
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
terminate/2, code_change/3]).
hello() ->
gen_server:call(Pid, hello).
handle_call(hello, _From, _State) ->
Reply = io:format("Hello, world!~n")
{reply, Reply, State}.