Como a programação orientada para eventos é implementada?
-
27-09-2019 - |
Pergunta
Eu estava analisando como o Twisted e Node.js Frameworks funcionam e estou tentando entender exatamente como o sistema operacional suporta operações de E/S usando retornos de chamada.
Entendo que é bom porque precisamos de menos threads, porque não precisamos ter threads bloqueados esperando as operações de E/S. Mas algo tem que ligar para o retorno de chamada assim que a E/S terminar.
Como isso é implementado pelo sistema operacional?
Solução
Uma abordagem é fazer com que o sistema operacional anexe informações sobre qualquer pessoa que aguarde um retorno de chamada para a estrutura de dados relevante, como o equivalente no kernel no descritor de arquivos que você está esperando por uma notificação de leitura. Quando algo acontece com esse descritor de arquivo, o sistema operacional verifica os garçons para ver se algum deve ser notificado. Se eles deveriam, então o faz. Você pode ler sobre uma implementação disso em Artigo de Lemon Introduzindo FreeBSD's kqueue
mecanismo. Veja em particular a Seção 6, "Implementação", subseções 3 e 4, "Atividade na fonte do evento" e "entrega".
Outras dicas
Isso é resolvido no sistema operacional usando "instalações/interfaces de notificação de eventos de E/S", por exemplo, Epoll, votação, Kqueue ou selecione.
Dar uma olhada em hábil, e especialmente é ' IO/loop de eventos Para um exemplo concreto, como os "sistemas de notificação" mencionados acima são usados. (java.nio.channels.setor é a maneira Java Nio de fornecer uma abstração para isso.)
Isenção de responsabilidade: sou um comissário hábil