Erlang (programming language)/Tutorials/Tree Hello

From Citizendium
Jump to navigation Jump to search

Hello in Parallel

Parallel Hello World

-module(tree_hello).                                                   % 1
-export([start/0, speak/1]).                                           % 2
                                                                       % 3
start() ->                                                             % 4
 	Pid1 = spawn( tree_hello, speak,[ 1 ]),                        % 5
 	Pid2 = spawn( tree_hello, speak,[ 2 ]),                        % 6
        Pid1 ! {hello, world},                                         % 7
        Pid2 ! {hello, world},                                         % 8
 	done.                                                          % 9
                                                                       % 10
speak(N) ->                                                            % 11
        receive			                                       % 12
 		{hello, world} ->	                               % 13
                       io:format("Hello, world! ~w \n", [N])           % 14
 	end.                                                           % 15


==========================================================================            

output
--------------------
tree_hello:start().
 hello world! 1
 hello world! 2
 done

Analysis of the example

Here is a simple hello world in the parallel spirit of erlang. The program, par_hello, will create 3 processes, one manager process called "start( )" and 2 worker processes called speak(1) and speak(2) in a tree like relationship. Start( ) creates speak(1) and speak(2), then start( ) sends a message to each worker. The message is {hello, world}. Each worker process responds by printing out "hello world". All three are running simultaneously when line 7 starts.

Lines 1 to 4: see serial "hello world".
Line 5 spawns a process called speak giving it one argument with the value 1.
 Line 5 also creates a variable Pid1 and gives it the processes id number of speak(1).
Line 6 spawns a process called speak giving it one argument with the value 2.
 Line 6 also creates a variable Pid2 and gives it the process id number of speak(2).
Line 7 uses the Pid1(process id number of speak(1) to send a message to speak(1).
Line 8 uses the Pid2(process id number of speak(2) to send a message to speak(2).
Line 9 "done" is an arbitrary atom that finishes the function start( ). 
Line 10 is a call to print formated text from the input/output(io) module(library).
Line 11 starts the function speak(N).
Line 12 starts to listen for a message.
Line 13 lists the message that is received
Line 14 shows what happens when the message in 13 is received.
 Line 14 prints out "hello world 1" if N is one or "hello world 2" if N is 2

Note: bang, ! in erlang means "send the following message".