42. Nio (optimización de subprocesos múltiples (análisis de problemas))

Nio (optimización multiproceso (análisis de problemas))

Problema: Nuestro cliente envía datos, pero el cliente no puede imprimir el contenido de nuestro evento legible (no ingresa al evento worker.select)

 

La causa del problema: en el método de selección de selector y el método de registro de sc

 

El método Select (evento) se ejecuta en el subproceso del trabajador0, y nuestro método de registro (registro) se ejecuta en el subproceso del jefe (se ejecutan en diferentes subprocesos) pero todos usan el mismo selector (ambos son selectores de trabajo (Selector)) . Se afectarán entre sí. Siempre que la selección esté bloqueada, el registro debe esperar (por ejemplo, cuando llega un evento, la selección se despierta y el trabajador 0 puede ejecutarse, y luego el subproceso del jefe puede ejecutarse)

Lógica: aquí nuestra lógica es que primero inicializamos el selector y comenzamos el hilo del trabajador0. Entonces, primero se ejecuta la selección del selector, y luego se ejecuta el siguiente registro (el frente está bloqueado, lo que dificulta este método)

Mejore la lógica: primero debemos registrarlo con el selector en el hilo del jefe, y luego seleccionar el selector (primero seleccionamos el resultado y el selector se bloqueará si no hay ningún evento (no se puede usar), luego el no se registraran los siguientes eventos a nuestro selector selector)

 

 

Optimización 1: colocamos worker.register en sc.register (estas dos funciones son diferentes, la primera es inicializar e iniciar el subproceso de trabajo (método slelct), y la última es registrar el evento en el selector)

De esta forma, su subproceso de trabajo comienza al mismo tiempo que el subproceso de jefe. Al ingresar al estado listo, la CPU que programa estos dos subprocesos no significa necesariamente que el trabajador ingrese primero al estado de ejecución.

 

 

Pero esto no funciona, es un evento accidental del cliente (el jefe está en el estado avanzado de ejecución del trabajador), pero si hay varios clientes, definitivamente bloqueará el método de selección de nuestro selector después de que lo ejecutemos por la primera vez. Entonces el registro del siguiente jefe debe estar atrasado.

 

 

Supongo que te gusta

Origin blog.csdn.net/logtcm4/article/details/127832591
Recomendado
Clasificación