4 tipos de fluxo IO Java

4 tipos de IO modelo Java relacionados

1. E / S de bloqueio síncrono

Um exemplo típico é o exemplo de TCP do soquete

Comunicação entre servidor e cliente

Algo assim

A seguir, são pseudo códigos

// server端 阻塞自己直到收到消息
// 没收到 线程被挂起
msg = server.accept()
// 收到再执行
handler(msg)

2. Entrada / Saída síncrona e sem bloqueio

// server端 
while(msg=server.accpet() !=null){
	handle(msg)
}

Ao contrário do bloqueio de E / S, sempre deve haver um valor de retorno.

3. Entrada / Saída Multiplexada

Esse deve ser o modelo de E / S mais utilizado. Muitas estruturas de E / S de alto desempenho são baseadas em E / S multiplexadas.

Como netty

O nio é a base do IO multiplexado

Existem dois modos de multiplexação: modo Proactor e modo Reator

O Proactor é usado para E / S assíncronas

O reator é usado para E / S síncrona

  • Modo reator

    O entendimento popular é

    Mãe(Cliente) querEu (Servidor) meio-diaCozinhar
    (Solicitação de evento / ou pedido de veiculação),

    Mas agora eu quero jogar (não quero esperar o tempo e depois cozinhar)

    Deixa eu contarXiao Ai(Registro de eventos)
    Até então, Xiao AiDespertador(Condições)Lembre-me de cozinhar(Callbakc me liga de volta)
    Então eu sei que vouCozinhar(Pronto para concluir IO)

    O evento foi registrado como "Quero cozinhar minha própria comida"

    O resultado do retorno de chamada é "isso pode ser feito"

  • Modo Proactor

    O entendimento popular é

    Mãe(Cliente) querEu (Servidor) meio-diaCozinhar(Solicitação de evento / ou pedido de veiculação),

    Mas agora eu quero jogar (não quero esperar o tempo e depois cozinhar)

    Deixa eu contarXiao AiEu quero cozinhar (separador de eventos) provavelmente1 xícara de arroz e 1,5 xícaras de água(Tamanho dos dados e área de buffer), os estudantes Xiao Ai iniciam diretamente o processoPanela de arroz(Sistema operacional) Despeje o arroz e adicione água. A panela de arroz está pronta, Xiao Ai conhece o arrozCozido(IO concluído).Lembre-me de comer(Notifique-me que eu posso comer)

    Então eu entendi (evento terminado)

    A inscrição do evento é "Quero que o arroz cozinhe bem mesmo. Não me importo"

    O resultado do retorno de chamada é "Isso é feito de acordo com a exigência de 1,5 xícaras de água por uma xícara de arroz"

Uma análise mais detalhada do modo Reator geralmente usa o modo Reator, porque o Proactor requer um sistema operacional

Existem os três modos a seguir para lidar com solicitações de IO altamente simultâneas

Os seguintes códigos e imagens são provenientes de

Doug Lea

E / S escalável em Java

Recomenda-se baixar este pdf para aprender

Modelo IO tradicional

Insira a descrição da imagem aqui

  1. Thread de processamento único de reator único

    O One Reactor lida com todos os pedidos, incluindo io e outras operações
    Insira a descrição da imagem aqui

  2. Thread de multiprocessamento de reator único

    O reator somente conclui o IO e o restante é entregue ao encadeamento do trabalhador
    Insira a descrição da imagem aqui

  3. Linha de Processamento Multi Reator Multi

    Solicitação separada e operação real
    Insira a descrição da imagem aqui

4. E / S Assíncronas

Raramente usado, requer sistema operacional

file = socket.getfile(buff,size);
// 等待一段时间
// buff size 中已经有了file
// 告诉我  我收到了
res = server.finishfile()
Publicado 22 artigos originais · Curtidas2 · Visitas 881

Acho que você gosta

Origin blog.csdn.net/weixin_41685373/article/details/104973584
Recomendado
Clasificación