As perguntas mais comuns feitas na entrevista recentemente são o campo de IO. Alguns deles foram respondidos, enquanto outros não responderam bem. Recentemente, comecei a aprender mais sobre algumas dessas coisas e quero resumi -las.
Ponto frontal
1. Espaço do sistema de espaço do usuário
O sistema Linux dividirá um processo em dois espaços, espaço do usuário e espaço do sistema. Por exemplo, nossa codificação normal é todo o espaço do usuário. Se precisarmos chamar funções do sistema, como copiar arquivos do sistema, precisamos chamar componentes do sistema, obter serviços de kernel e completar operações.
Dois estágios de io
O processo de execução de IO é dividido em duas etapas, esperando por cópia pronta para executar
Esperando pronto: sabemos que, quando executamos operações de IO, os dados podem vir de outros aplicativos ou redes. Se não houver dados, o sistema operacional aguardará. No momento, o aplicativo também pode esperar por copiar: copie os dados para o espaço de trabalho do aplicativo
Bloqueio e não bloqueio, síncrono e assíncrono
Vamos falar sobre sincronização e assíncrono primeiro. O mais fácil é ver se um tópico ou processo é iniciado para concluir o IO. Ao sincronizar a IO, o sistema parará e espera que isso termine antes de fazer outras coisas. O IO assíncrono usa o método de threading múltiplo para iniciar um novo thread para fazer isso, e você pode fazer outras coisas e aguardar a notificação.
Vamos falar sobre bloqueio e não bloqueio. Essas duas coisas realmente se concentram no estado do programa ao aguardar o resultado da chamada. Bloquear significa que, quando você obtém esse resultado, você pendurará até esperar pelo resultado completo. Não bloqueio significa que, quando o processo não pode obter o resultado, não há thread de bloqueio. Isso está um pouco emaranhado. Há uma explicação comum. Se estiver bloqueando, quero conseguir isso. Durante o processo de aquisição, perco a CPU. Não vou obter a CPU até o resultado. No entanto, se eu não for bloquear, continuarei segurando a CPU e ainda posso verificar.
Vários modelos de IO
Existem 5 tipos atualmente
Bloqueando io
O tipo de IO mais tradicional, isto é, ler e escrever bloquearão
IO não bloqueador
Quando o usuário iniciar a leitura, ele não perde a CPU, ele continuará checando. Se não for bem -sucedido, um erro será retornado. Se receber um sinal bem -sucedido, iniciará uma operação de leitura para obter o resultado completo.
Multiplexing io
Este é o núcleo de Java Nio. Haverá um thread que gerencia o status de vários soquetes para verificar se você está pronto. Somente quando você achar que está realmente pronto, você ligará para a CPU para executar operações de IO. Isso é mais importante
Acionamento de sinal io
Use menos, ignore
IO assíncrono
Obtenha um tópico para executar