erlang otp said gen_server:call
synchronous , gen_server:cast
asynchronous.
after testing, find gen_server:call
synchronous . however, gen_server:cast
send message mailbox, did not run tasks in parallel.
how can create multi processes run?
-module(example_gen). -behaviour(gen_server). -export([start_link/0]). -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). -export([ add_bycall/2, add_bycast/2 ]). -define(server, ?module). -record(state, {}). add_bycall(key, value) -> gen_server:call(?server, {bycall, key, value}). add_bycast(key, value) -> gen_server:cast(?server, {bycast, key, value}). example(key, value) -> timer:sleep(2000), io:format("finished [~p, ~p] @ [~p] ~n", [key, value, erlang:system_time(milli_seconds)]). start_link() -> gen_server:start_link({local, ?server}, ?module, [], []). init([]) -> {ok, #state{}}. handle_call({bycall, key, value}, _from, state) -> example(key, value), {reply, ok, state}; handle_call(_request, _from, state) -> {reply, ok, state}. handle_cast({bycast, key, value}, state) -> example(key, value), {noreply, state}; handle_cast(_request, state) -> {noreply, state}. handle_info(_info, state) -> {noreply, state}. terminate(_reason, _state) -> ok. code_change(_oldvsn, state, _extra) -> {ok, state}.
running code
[example_gen:add_bycall(k, k) || k <- lists:seq(1, 10) ]. [example_gen:add_bycast(k, k) || k <- lists:seq(1, 10) ].
terms synchronous , asynchronous orthogonal terms serial , parallel. gen_server:call/2,3
synchronous caller , gen_server:cast/2
asynchronous caller. work performed 1 gen_server
serial because performed 1 process.
what terms asynchronous , synchronous means in case. if have code
gen_server:call(s, foo), bar(),
work triggered foo
performed before bar/0
, bar/0
performed after work foo
finished. foo
, bar/0
synchronous. if have code
gen_server:cast(s, foo), bar(),
work triggered foo
can performed before bar/0
after or in parallel on smp systems. foo
, bar/0
asynchronous. synchronization matters between caller , callee.
Comments
Post a Comment