OK, eu estava pensando nisso hoje e vim pedir opiniões completamente subjetivas e tendenciosas sobre isso. Paradoxalmente, apesar disso, também não acho que seja forragem de guerra. Acho que há espaço para uma conversa perfeitamente civilizada - dificilmente é Vim vs Emacs.
Eu usei muitas abstrações de simultaneidade, especificamente aquelas criadas sobre tópicos. Há uma grande tendência entre elas, seja a transmissão de mensagens, imutável por padrão, ou thread local por padrão ou outras.
A tendência é que todos eles invertam a ideia de threads, tornando o compartilhamento de dados explícito e não implícito. Ou seja, todos os dados não são compartilhados, a menos que seja especificado de outra forma, o que é o oposto do encadeamento tradicional encontrado em linguagens como Java. (Eu sei que o Java suporta suas próprias abstrações de simultaneidade de nível superior.) Por exemplo, você passa mensagens explicitamente. Você declara explicitamente quais variáveis são locais de encadeamento. Você declara explicitamente quais variáveis são mutáveis. Estes são apenas alguns exemplos encontrados em alguns idiomas.
Eu pensei que esse estilo fácil de concorrência era um conceito moderno. Eu estava errado. Comecei a brincar com brinquedos UNIX como fork () e pipe () recentemente, e fiquei chocado ao descobrir que mecanismos de concorrência explícitos e sem esforço existem desde o início do UNIX.
Há algo um pouco estranho em perceber que o C + UNIX dos anos 70 facilita a concorrência muito mais do que muitos mecanismos modernos de encadeamento na moda.
Então, aqui está o que eu estou pensando ... essas abstrações de encadeamentos modernos estão simplesmente tentando imitar processos no estilo UNIX sobre encadeamentos, com todos os seus traços explícitos e não compartilhados por padrão? Sei que alguns mecanismos como o STM oferecem coisas como transações no estilo DB, que são genuinamente uma solução moderna e inovadora para simultaneidade, mas a maioria parece apenas novas maneiras de fazer o que os codificadores UNIX estavam fazendo há muito tempo.
Só para dizer, eu não sou um fanboy do UNIX, nem por qualquer imaginação. Estou ciente de que os processos são muito mais lentos do que os threads para inicializar em muitas plataformas, mas estou falando sobre isso de uma base conceitual.
Respostas:
Boa observação, há definitivamente uma tendência para o compartilhamento explícito (seja através de linguagens funcionais ou convenções). O comentário sobre os processos serem mais lentos eu me adaptaria um pouco: eles são mais pesados , o que significa que não são mais lentos na execução do desempenho bruto, mas cada alternância entre eles leva muito mais tempo do que a alternância entre threads. Você já reconheceu que existem outras formas de simultaneidade e reconhece o STM . Gostaria apenas de acrescentar que existe (além do compartilhamento explícito e do STM) também uma tendência crescente para o pool de threads (tarefa paralela; atribua tarefas a threads de trabalho que foram iniciadas anteriormente e recicle-as): Definitivamente, o caminho a seguir em termos de desempenho e, curiosamente, uma abordagem diferente ao compartilhamento explícito, porque os threads em pool geralmente estão em um único processo.
fonte
Eu acho que é menos uma questão de X emular Y, do que tentar encontrar um equilíbrio.
Processos completamente separados mantêm a vida relativamente simples. Eles facilitam bastante a criação de coisas como pipelines de processos que tiram pelo menos alguma vantagem de vários processadores. No entanto, existem algumas desvantagens bastante óbvias - particularmente falta de flexibilidade e um pouco de sobrecarga.
Um único processo com vários encadeamentos de execução compartilhando essencialmente todos os recursos basicamente os reverte: menor sobrecarga e muita flexibilidade, à custa de ser mais difícil projetar e / ou manter-se estável.
Na maioria das vezes, o que está acontecendo é que as pessoas estão trabalhando para encontrar um meio termo que ofereça quase a flexibilidade e a velocidade dos encadeamentos, com um design mais simples e um resultado mais estável de processos separados (e, acho que eles estão conseguindo, em grande parte, pelo menos algum grau).
fonte