simultaneidade estruturada

Simultaneidade estruturada é um paradigma de programação destinado a melhorar a clareza, qualidade e tempo de desenvolvimento de um programa de computador usando uma abordagem estruturada para programação simultânea .

O conceito central é o encapsulamento de threads simultâneos de execução (aqui englobando threads e processos de kernel e userland) por meio de construções de fluxo de controle que possuem pontos de entrada e saída claros e que garantem que todos os threads gerados sejam concluídos antes da saída. Esse encapsulamento permite que erros em threads simultâneos sejam propagados para o escopo pai da estrutura de controle e gerenciados pelos mecanismos nativos de tratamento de erros de cada linguagem de computador específica. Ele permite que o fluxo de controle permaneça prontamente evidente pela estrutura do código-fonte, apesar da presença de simultaneidade. Para ser eficaz, esse modelo deve ser aplicado consistentemente em todos os níveis do programa – caso contrário, os threads simultâneos podem vazar, tornar-se órfãos ou não ter erros de tempo de execução corretamente propagados.

A simultaneidade estruturada é análoga à programação estruturada , que introduziu construções de fluxo de controle que encapsulavam instruções sequenciais e sub-rotinas.

História

O modelo fork-join da década de 1960, incorporado por ferramentas de multiprocessamento como o OpenMP , é um dos primeiros exemplos de um sistema que garante que todos os threads sejam concluídos antes da saída. No entanto, Smith argumenta que esse modelo não é uma simultaneidade estruturada verdadeira, pois a linguagem de programação não tem conhecimento do comportamento de junção e, portanto, é incapaz de reforçar a segurança. [1]

O conceito foi formulado em 2016 por Martin Sústrik (criador do ZeroMQ ) com sua biblioteca C libdill, com goroutines como ponto de partida. [2] Ele foi refinado ainda mais em 2017 por Nathaniel J. Smith, que introduziu um "padrão de berçário" em sua implementação do Python chamada Trio. [3] Enquanto isso, Roman Elizarov independentemente teve as mesmas ideias enquanto desenvolvia uma biblioteca experimental de co-rotinas para a linguagem Kotlin , [4] [5] que mais tarde se tornou uma biblioteca padrão. [6]

Em 2021, a Swift adotou a simultaneidade estruturada. [7] Mais tarde naquele ano, uma proposta preliminar foi publicada para adicionar simultaneidade estruturada ao Java . [8]

variações

Um ponto importante de variação é como um erro em um membro de uma árvore de encadeamentos simultâneos é tratado. Implementações simples simplesmente esperarão até que os filhos e irmãos do encadeamento com falha sejam executados até a conclusão antes de propagar o erro para o escopo pai. No entanto, isso pode levar um tempo indefinido. A alternativa é empregar um mecanismo de cancelamento geral (normalmente um esquema cooperativo que permite que as invariantes do programa sejam respeitadas) para encerrar os threads filhos e irmãos de maneira conveniente.

Veja também

Referências

  1. ^ Smith, Nathaniel J. (25 de abril de 2018). "Notas sobre simultaneidade estruturada, ou: declaração Go considerada prejudicial" . Acesso em 1 de agosto de 2019 .
  2. Sústrik, Martin (7 de fevereiro de 2016). "Simultaneidade Estruturada" . Acesso em 1 de agosto de 2019 .
  3. ^ Smith, Nathaniel J. (10 de março de 2017). "Trio Anunciando" . Recuperado em 23 de setembro de 2022 .
  4. Elizarov, Roman (12 de setembro de 2018). "Simultaneidade estruturada" . Acesso em 21 de setembro de 2019 .
  5. Elizarov, Roman (11 de julho de 2019). Simultaneidade estruturada (vídeo). Conferência Hydra Distributed Computing. 42 minutos em . Acesso em 21 de setembro de 2019 . Precisávamos de um nome e precisávamos finalizar todo esse conceito [...] e nos deparamos com esta postagem [...] do blog de Nathaniel J. Smith.
  6. ^ "Noções básicas de corrotinas: simultaneidade estruturada" . Kotlin . JetBrains . Acesso em 3 de março de 2022 .
  7. ^ McCall, John; Groff, Joe; Gregor, Doug; MALAWSKI, Konrad. "Proposta de simultaneidade estruturada rápida" . Repositório Swift Evolution da Apple . GitHub . Acesso em 3 de março de 2022 .
  8. ^ Pressler, Ron. "Rascunho do PEC: Simultaneidade Estruturada (Incubadora)" . OpenJDK . Oráculo . Acesso em 3 de março de 2022 .

links externos

  • Notas sobre simultaneidade estruturada, ou: Declaração Go considerada prejudicial por Nathaniel J. Smith
  • Fórum de simultaneidade estruturada, discussão entre linguagens de computador sobre simultaneidade estruturada com a participação de Sústrik, Smith e Elizarov
  • FOSDEM 2019: Simultaneidade estruturada, palestra relâmpago de Martin Sustrik com links para algumas implementações