Passagem de Mensagens (Message Passing)

Definição

Passagem de Mensagens (ou message passing) é um modelo de comunicação concorrente em que processos ou threads trocam informações enviando mensagens explícitas entre si, em vez de acessarem memória compartilhada.

Nesse modelo, cada unidade de execução mantém seu próprio estado isolado, e toda coordenação ocorre por meio de envio e recebimento de mensagens.
É uma alternativa segura ao uso de locks e memória compartilhada, especialmente útil em arquiteturas distribuídas, sistemas concorrentes modernos e linguagens que valorizam imutabilidade.

Objetivos do uso de Message Passing

  • Evitar problemas de concorrência, como condições de corrida e deadlocks.
  • Promover isolamento entre tarefas, com comunicação explícita.
  • Facilitar paralelismo seguro em sistemas com múltiplos processos ou threads.
  • Aplicar o modelo de atores, como visto em linguagens como Erlang, Elixir e no framework Akka.

Exemplo prático (Python)

from multiprocessing import Process, Queue

def produtor(fila):
    for i in range(5):
        fila.put(f"Mensagem {i}")

def consumidor(fila):
    while not fila.empty():
        msg = fila.get()
        print("Consumidor recebeu:", msg)

if __name__ == "__main__":
    fila = Queue()
    p1 = Process(target=produtor, args=(fila,))
    p2 = Process(target=consumidor, args=(fila,))

    p1.start()
    p1.join()  # aguarda o produtor terminar

    p2.start()
    p2.join()  # aguarda o consumidor terminar

Saída esperada

Consumidor recebeu: Mensagem 0
Consumidor recebeu: Mensagem 1
Consumidor recebeu: Mensagem 2
Consumidor recebeu: Mensagem 3
Consumidor recebeu: Mensagem 4
  • A fila (Queue) atua como canal de comunicação entre os processos.

  • Os processos não compartilham variáveis diretamente.

  • O modelo é seguro e evita condições de corrida por design.

O ciclo da passagem de mensagens

[Produtor] --> envia mensagens --> [Canal] --> [Consumidor] lê mensagens
  • Cada parte mantém seu estado privado.
  • Toda interação ocorre por mensagens explícitas.

Onde é aplicado

  • Sistemas distribuídos e de múltiplos processos.
  • Ambientes com forte isolamento de estado (ex: microserviços).
  • Linguagens como Erlang, Elixir, Go (com canais), Rust (com mpsc), Java (com filas).

ℹ️ Info: O modelo de message passing é considerado mais fácil de razonar do que o uso direto de locks,
pois elimina a necessidade de sincronização manual e favorece o isolamento entre componentes.

Relacionados

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com