4 tipos de IO stream Java

4 tipos de modelos IO relacionados con Java

1. Bloqueo síncrono IO

Uno típico es el ejemplo de TCP de socket

Servidor y comunicación con el cliente

Algo como esto

Los siguientes son pseudocódigos

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

2. IO sin bloqueo sincrónico

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

A diferencia del bloqueo de E / S, debe haber un valor de retorno cada vez.

3. IO multiplexado

Este debería ser el modelo de E / S más utilizado. Muchos marcos de E / S de alto rendimiento se basan en E / S multiplexadas.

Como mezquino

nio es la base de IO multiplexado

Hay dos modos de multiplexación: modo Proactor y modo Reactor

Proactor se utiliza para E / S asincrónicas

Reactor se utiliza para IO síncrono

  • Modo Reactor

    La comprensión popular es

    Madre(Cliente) quiereYo (Servidor) mediodíaCocinando
    (Evento / o solicitud de IO),

    Pero ahora quiero jugar (no quiero esperar el tiempo y cocinar arroz),

    Dejame decirXiao Ai(Registro de eventos)
    Para entonces, Xiao AiReloj despertador(Condiciones)Recuérdame cocinar(Callbakc me devuelve la llamada)
    Entonces sé que voyCocinando(Listo para completar IO)

    El evento se registró como "Quiero cocinar mi propia comida"

    El resultado de la devolución de llamada es "esto se puede hacer"

  • Modo Proactor

    La comprensión popular es

    Madre(Cliente) quiereYo (Servidor) mediodíaCocinando(Evento / o solicitud de IO),

    Pero ahora quiero jugar (no quiero esperar el tiempo y cocinar arroz),

    Dejame decirXiao AiQuiero cocinar (separador de eventos) probablemente1 taza de arroz y 1,5 tazas de agua(Tamaño de datos y área de almacenamiento intermedio), los estudiantes de Xiao Ai inician directamente el automáticoOlla arrocera(Sistema operativo) Vierta el arroz y agregue agua. La olla arrocera está lista, Xiao Ai conoce el arrozCocinado(IO completado).Recuérdame a comer(Avísame que puedo comer)

    Entonces lo tengo (evento terminado)

    El registro del evento es "Quiero que el arroz se cocine bien de todos modos. No me importa"

    El resultado de la devolución de llamada es "Esto se hace de acuerdo con el requisito de 1.5 tazas de agua por una taza de arroz"

Un análisis más detallado del modo Reactor generalmente usa el modo Reactor, porque Proactor requiere un sistema operativo

Existen los siguientes tres modos para manejar solicitudes de E / S altamente concurrentes

Los siguientes códigos e imágenes provienen de

Doug Lea

IO escalable en Java

Se recomienda descargar este pdf para aprender

Modelo tradicional IO

Inserte la descripción de la imagen aquí

  1. Single Reactor hilo de procesamiento único

    One Reactor maneja todas las solicitudes, incluidas io y otras operaciones
    Inserte la descripción de la imagen aquí

  2. Rosca multiprocesador de reactor único

    Reactor solo completa IO, y el resto se entrega al hilo del trabajador
    Inserte la descripción de la imagen aquí

  3. Hilo de procesamiento múltiple de múltiples reactores

    Solicitud separada y operación real
    Inserte la descripción de la imagen aquí

4. IO asíncrono

Raramente utilizado, requiere sistema operativo

file = socket.getfile(buff,size);
// 等待一段时间
// buff size 中已经有了file
// 告诉我  我收到了
res = server.finishfile()
22 artículos originales publicados · Me gusta2 · Visitas 881

Supongo que te gusta

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