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:

  1. Implemente um processo com o seguinte comportamento:
  2. Implemente o seguinte sistema:
  3. 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:

  4. Com base no exercício de records da aula anterior, crie um processo que faça a gestão da sua agenda pessoal. Deve ser possível adicionar uma nova entrada, consultar uma entrada por nome e consultar toda a agenda.