Concorrência, paralelismo, assincronia, non-blocking e seus conceitos
(black7375.tistory.com)Comecei com uma breve organização dos termos e cobri uma ampla gama de tópicos, de gráficos a semicondutores.
- Termos
- concorrência / paralelismo
- assíncrono / non-blocking
- preemptivo / não preemptivo
- Sistema operacional e processador
- sistema operacional
- processador
- Corrotinas e fibers
- fiber
- corrotina
- Generators, Async/Await e continuations
- generator
- Async / Await
- continuation
- Promise e Future
- Multiplexação de I/O
- multiplexação
- socket
- modelos de I/O
- Ring buffer, modelos modernos de I/O, LMAX Disruptor
- ring buffer
- modelos modernos de I/O
- LMAX Disruptor
- Primitivas de sincronização
- necessidade
- thread safety
- spinlock
- mutex
- semáforo
- STM
- GIL
- Abordagens de outras linguagens de script e os padrões Reactor/Proactor
- Ractor (Ruby)
- Node.js (padrão Reactor)
- padrão Proactor
- CSP e atores
- CSP
- atores
- Green threads, goroutines e tecnologias modernas de runtime assíncrono
- green threads
- runtimes modernos de CSP
- runtimes modernos de atores
- Paralelismo
- SIMD e pipelining
- OpenMP & MPI
- técnicas modernas de paralelismo
- arquitetura lambda
- GPU
- pipeline e shaders
- monitor
- buffering
- sincronização vertical
- frame pacing e beam racing
- compositor
- APIs / bibliotecas gráficas
- Outros chips
- visão geral
- DSP
- FPGA
- TPU
- Referências
10 comentários
Vejo essa frase sendo repetida exatamente da mesma forma em inúmeros blogs, e fiquei curioso sobre qual é a fonte original.
A maioria dos blogs está ocupada demais referenciando uns aos outros, então não consegui inferir o texto original; o máximo que encontrei foi o documento sobre AIO da IBM, mas me parece que ali a discussão fica limitada apenas a kernel I/O. E também ouvi dizer que esse próprio critério de distinção é controverso.
Isso é um critério de julgamento confiável?
Primeiro, acho que dá para basear síncrono/assíncrono na área de circuitos.
Circuitos síncronos usam clock para temporização, e os assíncronos são acionados por eventos ou outras entradas.
Ou seja, não parece forçado definir uma API assíncrona da mesma forma, como algo acionado por callbacks etc.
https://developer.mozilla.org/en-US/docs/…
No caso de APIs bloqueantes/não bloqueantes, uma definição adequada é se é necessário esperar obrigatoriamente pela operação ou não.
No entanto, para não esperar, é preciso haver uma implementação em que a função chamada tenha o controle, então acho que existe uma tendência de explicar bastante por esse lado.
https://nodejs.org/en/docs/guides/blocking-vs-non-blocking/
Eu tinha omitido isso para passar rapidamente, mas vou tentar acrescentar esse conteúdo também.
Concordo com tudo o que você disse. No entanto, ainda acho difícil ter certeza se esses dois eixos de referência devem ser desenhados em uma seção em forma de quadrante, se isso é possível, e se eles podem ser distinguidos adequadamente dessa forma. Para mim,
BlockingeSyncparecem compartilhar conceitualmente 90% do mesmo contexto. O mesmo vale paraNon-BlockingeAsync.Embora
Blocking-SynceNon-Blocking-Asyncsejam frequentemente usados juntos, há casos em que é necessário diferenciá-los.selectPor isso, eu penso que, na verdade, o correto é usá-los de forma distinta.
Parece que eu quase não entendo os exemplos que você mencionou, então acho que fica mais difícil me identificar com o ponto.
https://incredible-larva.tistory.com/entry/IO-Multiplexing-Topabogi-1bu neste texto, a explicação é a seguinte:
Queria saber qual é a sua opinião sobre isso. Na verdade, a partir desse ponto, passei a sentir que essa classificação 2x2 já não faz mais muito sentido. Parece que as interpretações variam bastante dependendo do domínio e da perspectiva.
Como essa parte é um método acionado por callback, como vocês concordaram acima, se for preciso realmente distinguir/definir, acho que o mais correto seria chamar isso de Blocking-Async.
Acredito que pode haver casos em que, dependendo da perspectiva, isso pareça ambíguo.
No entanto, polling é um exemplo claro:
https://en.wikipedia.org/wiki/Polling_(computer_science)
No caso de polling, como se verifica repetidamente se os dados estão prontos, é um exemplo apropriado de Sync-Blocking.
Uau, obrigado pelo ótimo material.
Li com gosto!
A rolagem parece não ter fim mesmo, nossa.
Acho que o livro "7 Modelos de Concorrência", que trata de um tema parecido, parece valer a leitura pelo menos uma vez.
Comparando os sumários, parecem bem parecidos.
Parece ser um bom livro