diff options
author | Nami-Doc <vendethiel@hotmail.fr> | 2014-05-19 09:44:03 +0200 |
---|---|---|
committer | Nami-Doc <vendethiel@hotmail.fr> | 2014-05-19 09:44:03 +0200 |
commit | e612932109592044fb183f3fa8810ace457c7b37 (patch) | |
tree | 03b701292091e7c044e057f7da10738cdee09bb3 | |
parent | 5f49993e555109aa17468e8a2e900f6079d7db54 (diff) | |
parent | 93dc62e0a32c3915f4242248dcb698b72083dd41 (diff) |
Merge pull request #613 from weakish/patch-26
erlang: add content about concurrency
-rw-r--r-- | erlang.html.markdown | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/erlang.html.markdown b/erlang.html.markdown index 065219ba..64b62f05 100644 --- a/erlang.html.markdown +++ b/erlang.html.markdown @@ -241,6 +241,45 @@ catcher(N) -> % exception, it is converted into a tuple that describes the error. catcher(N) -> catch generate_exception(N). +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 4. Concurrency +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% Erlang relies on the actor model for concurrency. All we need to write +% concurrent programs in erlang are three primitives: spawning processes, +% sending messages and receiving messages. + +% To start a new process we use the `spawn` function, which takes a function +% as argument. + +F = fun() -> 2 + 2 end. % #Fun<erl_eval.20.67289768> +spawn(F). % <0.44.0> + +% `spawn` returns a pid (process identifier), you can use this pid to send +% messages to the process. To do message passing we use the `!` operator. +% For all of this to be useful we need to be able to receive messages. This is +% achieved with the `receive` mechanism: + +-module(caculateGeometry). +-compile(export_all). +caculateAera() -> + receive + {rectangle, W, H} -> + W * H; + {circle, R} -> + 3.14 * R * R; + _ -> + io:format("We can only caculate area of rectangles or circles.") + end. + +% Compile the module and create a process that evaluates `caculateAera` in the shell +c(caculateGeometry). +CaculateAera = spawn(caculateGeometry, caculateAera, []). +CaculateAera ! {circle, 2}. % 12.56000000000000049738 + +% The shell is also a process, you can use `self` to get the current pid +self(). % <0.41.0> + ``` ## References |