Red de conocimiento informático - Aprendizaje de programación - ¿Cuáles son las tecnologías para alta concurrencia en JAVA?

¿Cuáles son las tecnologías para alta concurrencia en JAVA?

Estoy usando JAVA NIO, un marco de IO de alta concurrencia de uso común, y también lo he ampliado.

Java NIO se introdujo en jdk1.4. Puede describirse como "nueva E/S" o E/S sin bloqueo. Así es como funciona Java NIO:

1. Un hilo dedicado maneja todos los eventos de IO y es responsable de la distribución.

2. Mecanismo controlado por eventos: se activa cuando llega un evento, en lugar de monitorear eventos sincrónicamente.

3. Comunicación de subprocesos: los subprocesos se comunican entre sí mediante espera, notificación, etc. Esto garantiza que cada cambio de contexto sea un evento válido. Asegúrese de que cada cambio de contexto tenga sentido. Reduzca los tiempos innecesarios de cambio de hilo.

El servidor Java NIO solo necesita iniciar un hilo dedicado para manejar todos los eventos IO. ¿Cómo se implementa este modelo de comunicación? Java NIO utiliza un canal bidireccional para la transmisión de datos, en lugar de un flujo unidireccional, en el que se pueden registrar los eventos que nos interesan. Hay cuatro tipos de eventos:

El valor correspondiente al nombre del evento

Evento de conexión del cliente de recepción del servidor SelectionKey.OP_ACCEPT(16)

Evento del servidor de conexión del cliente SelectionKey.OP_CONNECT (8)

Leer evento SelectionKey.OP_READ(1) ​​​​

Escribir evento SelectionKey.OP_WRITE(4)

El servidor y el cliente cada uno mantener un canal de gestión Los objetos, llamados selectores, pueden detectar eventos en uno o más canales. Tomemos el lado del servidor como ejemplo. Si el lado del servidor registra un evento de lectura en el selector y el cliente envía algunos datos al lado del servidor en algún momento, el bloqueo de E/S llamará al método read() para bloquear el método de lectura. datos, y el lado del servidor NIO agregará un evento de lectura al selector. El hilo de procesamiento del lado del servidor sondeará el selector y, si encuentra eventos de interés al acceder al selector, procesará estos eventos; si no hay eventos de interés, el hilo de procesamiento se bloqueará hasta que llegue el evento de interés; El siguiente es un diagrama esquemático del modelo de comunicación Java NIO tal como lo entiendo: