Quando analisamos o modelo do ator e os processos sequenciais de comunicação , vemos que ambos estão tentando fazer simultaneidade com base na passagem de mensagens , mas são distintos .
(Nós vemos implementações do modelo CSP no go-lang 's goroutines (e do Clojure core.async ) eo Modelo Ator em Scala Akka kit de ferramentas)
Estou tentando obter uma lista simples das diferenças entre o modelo do ator e o CSP. Até agora eu tenho:
- a passagem de mensagens dos atores é assíncrona, a passagem de mensagens CSP é síncrona
- atores são compostáveis , CSP não é (necessariamente)
- os atores sempre têm um não-determinismo ilimitado , o CSP pode ter um não-determinismo ilimitado
- atores têm topologia variável enquanto CSP fixou topologia
- atores têm o princípio de localidade , CSP não tem localidade
- como os atores são projetados com base em seu comportamento, o CSP não tem necessariamente esse
Isso está correto? Falta alguma coisa?
Premissas
- Quando digo 'modelo de ator' - quero dizer a base teórica por trás da implementação na estrutura Akka de Scala
concurrency
message-passing
Hawkeye
fonte
fonte
Respostas:
Aqui está como eu acho que Erlang funciona. Eu acredito que Akka é muito parecido.
Cada processo possui uma única caixa de correio. As mensagens são colocadas na caixa postal do destinatário pelo remetente e buscadas pelo destinatário usando a correspondência de padrões. Esse processo de correspondência pode alterar a ordem das mensagens no sentido de que a mensagem mais antiga em uma caixa de correio pode não corresponder, mas uma mais nova. Nesse caso, o mais novo é consumido primeiro. Fora isso, a ordem das mensagens é preservada.
fonte