Proceso de ejecución del grupo de subprocesos Java

Subprocesos de usuario (ULT) : los subprocesos se implementan en programas de usuario sin soporte de kernel y no dependen del núcleo del sistema operativo.Los procesos de aplicación utilizan bibliotecas de subprocesos para proporcionar funciones para crear, sincronizar, programar y administrar subprocesos para controlar los subprocesos de los usuarios. Además, los procesos de aplicación crean y administran subprocesos de usuario mediante bibliotecas de subprocesos y no dependen del núcleo del sistema operativo. No es necesario cambiar de modo de usuario / modo de núcleo, y la velocidad es rápida. El núcleo del sistema operativo no sabe que deben existir múltiples subprocesos. Por lo tanto, un bloque de subprocesos hará que se bloquee todo el proceso. (El sistema operativo no tiene conocimiento de varios subprocesos creados internamente. Cuando se ejecuta un subproceso, el sistema operativo no asignará CPU adicionales a otros subprocesos de usuario)

Hilo de kernel (KLT) : el sistema operativo completa todas las operaciones de administración del hilo. El núcleo guarda el estado del hilo y la información de contexto. Cuando un hilo ejecuta una llamada al sistema que causa un bloqueo, el núcleo puede programar la ejecución de otros hilos del proceso. En un sistema multiprocesador, el núcleo puede asignar múltiples hilos que pertenecen al mismo proceso para ejecutarse en múltiples procesadores para mejorar la concurrencia de la ejecución del proceso. Dado que el núcleo completa la creación, programación y administración de subprocesos, las operaciones son mucho más lentas que las de los usuarios, pero aún más rápidas que las operaciones de creación y administración de procesos.

¿Por qué usar un grupo de subprocesos?
El subproceso es un recurso escaso, su creación y destrucción es una operación relativamente pesada y que consume muchos recursos, y el subproceso java depende del subproceso del núcleo y su creación requiere el cambio de estado del sistema operativo. Para evitar el consumo excesivo de recursos, intente reutilizar múltiples subprocesos Tareas, el grupo de subprocesos es un caché de subprocesos, responsable de la asignación unificada, la programación y el monitoreo de subprocesos.

Flujo de ejecución del grupo de subprocesos
Inserte la descripción de la imagen aquí

Por ejemplo, actualmente hay 100 tareas, el número de subprocesos principales en el grupo de subprocesos es 4 y el número máximo de subprocesos es 6.

  1. Cuando se ejecuta el método execute, 4 tareas ingresan directamente al grupo de subprocesos principales y se ejecutan
  2. Las 94 tareas restantes ingresan a la cola de tareas (ArrayBlockingQueue y LinkedBlockingQueue son colas limitadas, pero LinkedBlockingQueue es suficiente, el valor predeterminado es Integer.MAX_VALUE) en espera de ejecución.
  3. Cuando la cola está llena, las tareas restantes se ejecutan en el grupo de subprocesos no principales.
  4. Cuando se satisfacen tanto la cola como el grupo de subprocesos no centrales, se implementa la estrategia de rechazo:
    • ThreadPoolExecutor.AbortPolicy () - arroja java.util.concurrent.RejectedExecutionException
    • ThreadPoolExecutor.CallerRunsPolicy (): vuelva a intentar agregar la tarea actual, llamará automáticamente al método execute () repetidamente
    • ThreadPoolExecutor.DiscardOldestPolicy (): descarta las tareas antiguas
    • ThreadPoolExecutor.DiscardPolicy (): descarta la tarea actual
Publicado 39 artículos originales · elogiado 3 · visitas 3344

Supongo que te gusta

Origin blog.csdn.net/administratorJWT/article/details/105633396
Recomendado
Clasificación