A tecnologia subjacente que suporta Java Nio e Nodejs
Como todos sabemos, algum suporte para Java Nio e NiO2 foi adicionado às versões recentes do Java. Ao mesmo tempo, uma das vantagens mais elogiadas da pilha de tecnologia NodeJS é o seu IO de alto desempenho. Portanto, o tópico que discutiremos hoje são as tecnologias subjacentes que suportam essas tecnologias.
Uma pergunta a fazer antes de começar é:
Por que Nodejs e Java NiO2 não apareceram anteriormente?
Resposta: Pessoalmente, acho que a tecnologia de apoio subjacente ainda não está madura.
Então, o que significa a tecnologia subjacente? Sim, acho que muitas pessoas adivinharam que está operando a tecnologia do sistema. Os dois conceitos propostos neste artigo, Java NIO2 e NodeJS, são todas as tecnologias de Estado de Usuário ou tecnologias da camada de aplicativos, e essas tecnologias da camada de aplicativos são executadas no sistema operacional. Ao mesmo tempo, com o avanço do sistema operacional, os modelos de programação que podem ser suportados também são mais ricos. Pode -se dizer que essas duas tecnologias evoluíram completamente para aplicar os dividendos trazidos pelo progresso do sistema operacional. De um modo geral, a tecnologia que primeiro desfruta desse bônus deve ser C/C ++, porque a maioria dos mais recentes avanços no sistema operacional fornece chamadas de sistema e C/C ++ é a mais conveniente para aplicar essas chamadas do sistema, mas também é a mais complexa. Para obter o mesmo desempenho, outras plataformas devem evoluir e embalar constantemente para que os usuários possam usar esses dividendos. Uma vez que essa plataforma estagna e atualiza, é hora de diminuir essa plataforma. Quanto mais conveniente é encapsular, mais amigável é para o usuário e mais pessoas poderá usá -lo. Embora muitas pessoas possam escrever um código rapidamente com base nessas plataformas, elas geralmente não entendem a essência porque não estão essencialmente entendendo as motivações e princípios dessas tecnologias. As tecnologias que estamos discutindo abaixo são as tecnologias subjacentes relacionadas a essas duas tecnologias.
Independentemente do design do sistema operacional, os 5 modelos de IO a seguir são essenciais.
1. Bloqueando a E/S.
2. E/S não bloqueador
3. Multiplexação de E/S (selecione, enquete e epoll)
4. E/S do acionamento de sinal (SIGIO)
5. E/S assíncrona (as funções POSIX AIO_
1. Bloqueando a E/S.
Como mostrado na figura, a vantagem desse modelo de IO é que ele é simples de programar e também é um dos primeiros modelos de IO suportados pelo sistema operacional. A desvantagem é que o sistema chama a execução dinâmica de threads dos usuários, resultando em tempo desperdiçado na CPU e baixa eficiência de IO.
2. E/S não bloqueador
Como mostrado na figura, uma melhoria desse modelo de IO é que a IO não é bloqueadora, mas requer uma pesquisa longa, o que também desperdiça ciclos de relógio da CPU.
3. Multiplexação de E/S (selecione, enquete e epoll)
Como mostrado na figura, esse modelo de IO é o modelo de IO mais estável fornecido hoje pelo sistema operacional. A maioria dos aplicativos convencionais é criada neste modelo de IO, como o NodeJS. No entanto, essas plataformas geralmente adicionam uma camada de encapsulamento a este modelo para suportar diretamente a AIO.
4. E/S do acionamento de sinal (SIGIO)
Conforme mostrado na figura, os registros de dados que esse modelo de IO não tem vantagens de desempenho no Modelo 3 de Comparação e raramente é usado pelos designers devido à instabilidade no suporte do sistema.
5. E/S assíncrona (as funções POSIX AIO_
Conforme mostrado na figura, esse modelo de IO é o AIO mais perfeito, e o modelo de programação também é o mais simples, mas existem muito poucos sistemas operacionais que podem suportar perfeitamente o modelo. Informações on -line mostram que o Linux está fazendo esforços nesse sentido. Depois que o sistema operacional progredir nesse aspecto, a estrutura de programação, a plataforma e o modelo de programação ainda podem precisar ser bastante simplificados.
Embora esse modelo raramente seja suportado pelo sistema operacional, isso não significa que agora não exista um modelo AIO. Muitas estruturas fizeram esse aspecto e simularam a AIO no modo de usuário, permitindo que os usuários prestem mais atenção ao código da lógica de negócios.
6. Asíncronas síncronas, bloqueando e não bloqueando
Síncrono e assíncrono são para a interação entre a aplicação e o kernel. Os dados são lidos e, em seguida, o retorno é síncrono e o retorno é assíncrono. Bloqueio e não bloqueio são para processos e threads. O thread de leitura ou gravação está esperando no modo de bloqueio, em vez de no modo de bloqueio, o thread de leitura ou gravação retorna imediatamente um valor de status.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.