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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top