Programação concorrente
» Slides sobre programação
concorrente
Criar um novo processo
Processos e comunicação entre processos são conceitos fundamentais em Erlang. Um processo é uma unidade de computação que existe concorrentemente com outros processos no sistema. A função spawn/3 cria e inicia a execução de um novo processo. Os seus argumentos são:
spawn(Módulo, Nome da função, Lista de
argumentos)
Esta função retorna um identificador do processo (Pid). A função
spawn retorna imediatamente e não espera que a função iniciada seja
avaliada.
Um processo pode obter o seu próprio Pid usando a função self().
Comunicação entre processos
No Erlang a única forma de comunicação entre os processos é através
do envio de mensagens. Uma mensagem é enviada a um processo através da
função erlang:send/2
erlang:send(Pid destinatário,
Mensagem)
Existe uma forma abreviada de enviar uma mensagem a um processo,
usando o ponto de exclamação (!)
Pid ! Mensagem
Pid é o identificador do
processo (retornado pela função spawn/3)
para o qual a mensagem é enviada. Mensagem
pode ser qualquer termo válido em Erlang.
A primitiva send não bloqueia, isto é, não espera que a mensagem chegue ao destino.
Recepção de mensagens
A primitiva receive é usada para receber mensagens. A sua
sintaxe é a seguinte:
receive
Mensagem 1 [when Guard_1]-> processar mensagem;
...
Mensagem n [when Guard_n]-> processar mensagem
end.
Se a mensagem recebida validar algum dos padrões usados é processada. Esses padrões podem, opcionalmente, usar guards.
Cada processo tem uma mailbox e todas as mensagens são guardadas
pela mesma ordem que foram recebidas (FIFO). Qualquer mensagem que
esteja na
mailbox e não seja seleccionada por nenhuma cláusula do receive
permanece na mailbox do processo.
A primitiva receive bloqueia até a recepção de uma mensagem que valide alguma das suas cláusulas.
Exercícios:
Elabore um servidor que contabiliza o número de votos num conjunto
de bandas a concurso. Deverá existir um processo top que será responsável pela
recepção dos votos e posterior actualização da contagem. O processos
votantes (clientes) terão de conhecer o Pid de top.
Deverá ser possível: