Lea el principio de funcionamiento del grupo de subprocesos en un artículo

Prefacio

Este artículo utiliza un ejemplo del requisito de un programador para comparar el proceso de trabajo de un grupo de subprocesos. Despliegue en la forma vernácula de la historia, explíquele el principio de funcionamiento del grupo de subprocesos, para que pueda comprender mejor el grupo de subprocesos, gracias por leer ~

  • ¿Qué es un grupo de subprocesos?
  • ¿Qué es un hilo central?
  • ¿Qué es una cola de bloqueo?
  • ¿Qué es el tiempo libre?
  • ¿Qué es una estrategia de saturación?
  • ¿Qué es una estrategia de saturación?
  • Diagrama de flujo del principio de funcionamiento del grupo de subprocesos y descripción general del código fuente

¿Qué es un grupo de subprocesos?

"Little Ape" es diligente, trabajador, trabaja día y noche y, finalmente, un día, es ascendido a director de la empresa y es responsable de las actividades diarias de la empresa.

Un día, el jefe encontró a Xiao Yuan y le dijo: "Nuestra empresa tiene cada vez más empleados. Quiero construir un **" sistema de gestión de empleados "**. Puede organizarlo en un mes. "¡El pequeño mono se palmea el pecho, no hay problema!"

Debido a que la empresa aún no tiene un programador, Xiao Yuan abrió rápidamente ** "Zhubajie.com" y presentó los requisitos del sistema de gestión de empleados. Después de un tiempo, "desarrollador (nombre, hilo A)" ** tomó el pedido, negoció el contrato y desarrollo iniciado, entrega del sistema ... Una serie de procesos y un mes después, finalmente se completa un sistema completo de gestión de empleados ... El jefe lo aprecia mucho ~

Poco después, el jefe volvió a decir: "¡Cada vez más personas en la empresa llegan tarde, construyamos un **" sistema de asistencia " !" Xiaoyuan recibió la tarea e inmediatamente comenzó a ir a Zhubajie.com, pidiendo demanda y encontrando a alguien. para desarrollarlo. Esta vez, "Thread B toma el pedido" ** ...

El fallecido es así. A fin de mes, el jefe planteó la necesidad de desarrollar un sistema salarial ... El pequeño simio escuchó que su cuero cabelludo estaba entumecido, un día al día, ¡repita para encontrar a alguien en línea para desarrollarse! "Para ahorrar costos, ¿por qué no contratamos algunos programadores (subprocesos a, b, c) y configuramos nuestro propio departamento de tecnología de TI? ¡Llamemos al departamento de TI **" grupo de subprocesos "**!" El jefe escuchado. Es un éxito !!!

El grupo de subprocesos es un grupo para administrar subprocesos. Cuando hay tareas para procesar, no se crean con frecuencia nuevos subprocesos, pero se toma un subproceso del grupo para su procesamiento. Cuando se ejecuta la tarea, el subproceso no se destruirá, sino que estará esperando la siguiente tarea.

¿Qué es un hilo central?

Después del establecimiento del departamento de TI "Thread Pool" , contrató a varios empleados a, byc que tenían una relación contractual formal con la empresa. El "Little Ape" gestionaba algunos de sus empleados habituales como "hilos centrales" . Cuando el jefe presentó una demanda, el caracol Xiao Tian asignó la demanda al hilo de ** "No hay trabajo disponible" ** ...

¿Qué es una cola de bloqueo?

Una mañana, el jefe tenía sueño. Después de llegar a la empresa, mencioné los "cuatro requisitos" de una vez . Después de que a, byc siguieron la orden, descubrí que todavía había una tarea requerida. ¿Cómo arreglar esto? ¿Fuiste a la "Red de trabajo a tiempo parcial Zhu Ba Jie" para encontrar a alguien de nuevo? Estableció el "Departamento de TI de Thread Pool" **, e incluso fui a buscar a alguien (trabajo de hilo), ¡la gente se reiría a carcajadas!

El pequeño mono inteligente piensa en una buena manera. Podemos construir un grupo de demanda de DPMS, colocar la demanda no asignada en el grupo de demanda de DPMS para que se complete y esperar hasta que a, b, c termine el trabajo primero, y luego poner este la tarea lleva lejos. Este grupo de demanda de DPMS, llamémoslo ** "cola de bloqueo" y el nombre en inglés "WorkQueue" **.

¿Qué es un hilo no básico?

En otra tarde soleada, el jefe tomó una taza de café. Estaba bien cuando estaba libre, así que corrió a la ** "cola de bloqueo" (grupo de demanda de DPMS) para echar un vistazo, y fue un tonto a primera vista ! ! El grupo de demanda ha acumulado decenas de demandas y el calendario está lleno. El jefe llamó de inmediato a "Little Ape in the Office" ** para discutir cómo manejar estas tareas exigentes.

"O, ¿cuántos empleados más contratamos (cuántos **" hilos centrales "más )? "No, no, los " gastos generales " financieros de la empresa ** son un poco grandes. "

"De lo contrario, ¿le pedimos a la empresa que reduzca los requisitos de tareas? ( " Solicitar menos " )" "¿Eres estúpido, solicitando menos, no vas a recortar tu propio dinero? ¡Ve a casa y piensa en un camino primero! ! "El jefe magnificó su voz ~

El pequeño simio se fue a su casa y cerró los ojos para dejarse llevar por los dioses, se acostaba temprano todos los días, sin escuchar nada fuera de la ventana ... Finalmente un día, en una fragancia de ensueño, pensó en una buena manera. "Jefe, podemos ir a otra empresa ( " empresa de subcontratación " ) para contratar algunos empleados (asumiendo que los nombres son d, e, f, g) por un período de tiempo y dejar que lo hagan **" Grupo de demanda de DPMS ( cola de bloqueo) "* * La demanda dentro. Espere hasta que se cumplan los requisitos y luego envíelos de vuelta. "El jefe se alegra cuando lo escucha. Este plan es bueno y él se siente feliz: " Alguien ha hecho el trabajo que lo necesita y la empresa ahorra dinero. Tiene lo mejor de ambos mundos " ~ estos empleados subcontratados (d , e, f, g), llamémoslo ** "subproceso no básico" **.

¿Qué es el tiempo libre?

Dado que d, e, f, g subcontrató empleados ( "subprocesos secundarios" ), el jefe suspiró aliviado, tanto trabajo, que finalmente alguien lo hizo.

Pero, otro día, a la llamada hora fuera de servicio a las 7 en punto, el jefe salió de la oficina y descubrió que los empleados del departamento de TI del "grupo de subprocesos" se habían ido todos a toda prisa. Estaba furioso: "¿Cómo es que estos fans se escapan al final de las horas de trabajo, y el trabajo es tan insaturado" **? Hizo clic en el grupo de demanda de DPMS y descubrió que la demanda original se había cumplido. . . También hay un grupo de colegas de subcontratación (subprocesos secundarios) que tienen que pagar salarios. Esta ola de pérdidas es enorme ~

Al día siguiente, Xiao Yuan fue llamado a la oficina del jefe por el ** "secreto" , ya que el grupo de demanda de DPMS no tiene demanda. ¿Vamos a enviar de vuelta a un colega subcontratado (hilo no principal)? Pero en general, en cuanto no haya demanda, déjelos volver inmediatamente ( "reciclaje de hilo" **), si la demanda vuelve de repente, será un poco imbatible ...

"O si no, cuando esperamos a que el grupo esté vacío, 15 o 10 días después, ¿dejar que los colegas de subcontratación ( " subprocesos secundarios " ) retrocedan? "Los 15 o 10 días definidos por esta definición son **" tiempo de supervivencia inactivo del hilo "**

¿Qué es una estrategia de saturación?

A medida que se acercaba Double 11, no solo el jefe planteó muchas demandas, sino que las nuevas operadoras también plantearon muchas demandas. Nuevas demandas vienen como agua fluyendo de la fuente ~

En primer lugar, el departamento de TI del "grupo de subprocesos" a, b, c tres empleados formales (subprocesos centrales) están ocupados procesando la demanda ( "solicitud" ), luego, el grupo de demanda de DPMS ( "cola de bloqueo" ) también está abarrotado, y finalmente Bueno, incluso los colegas de subcontratación de d, e, f, g ( "subprocesos secundarios" ) están muy ocupados.

En este momento, la demanda aún no está terminada, ¿qué debo hacer? ¿Qué tal conectarse en línea en Double 11? El pequeño simio tiene cara de tristeza, de ** "la marea sube y el dolor llega a la marea" ** ...

No hay otra forma que utilizar la ** "estrategia de saturación" . Por ejemplo, "descartar tareas de demanda" ? "Lanzar la excepción y decirle al jefe que no aumente la demanda" ? ¿"Descartar la tarea de demanda más antigua del grupo de demanda" ? ¿O "entregárselo a la persona que hizo la solicitud" **?

Finalmente, el jefe decidió, "Se negó a plantear nuevos requisitos" , por lo que el ** "Grupo de subprocesos" ** El departamento de TI todavía funciona con normalidad ~

Hay cuatro tipos principales de eventos de estrategia de saturación en el grupo de ciudad de línea

  • AbortPolicy (lanza una excepción, la predeterminada)
  • DiscardPolicy (las tareas recién enviadas se descartan directamente)
  • DiscardOldestPolicy (descarte la tarea más antigua de la cola y continúe enviando la tarea actual al grupo de subprocesos)
  • CallerRunsPolicy (entregado al hilo donde se llama al grupo de hilos para su procesamiento, es decir, algunas tareas se revierten al llamador)

Diagrama de flujo del principio de funcionamiento del grupo de subprocesos y descripción general del código fuente

La historia terminó, revisemos el flujo de trabajo del grupo de subprocesos ~

Amigos que estén interesados, verifiquen también el código fuente ~

  if (command == null)
            throw new NullPointerException();
        int c = ctl.get();
        //判断当前活跃线程数是否小于corePoolSize
        if (workerCountOf(c) < corePoolSize) {
            //如果小于,则调用addWorker创建线程执行任务
            if (addWorker(command, true))
                return;
            c = ctl.get();
        }
        //如果大于等于corePoolSize,则将任务添加到workQueue队列。
        if (isRunning(c) && workQueue.offer(command)) {
            int recheck = ctl.get();
            if (! isRunning(recheck) && remove(command))
                reject(command);
            else if (workerCountOf(recheck) == 0)
                addWorker(null, false);
        }
        //如果放入workQueue队列失败,则创建非核心线程执行任务    
        else if (!addWorker(command, false))
            //(如果这时创建线程失败(当前线程数大于等于maximumPoolSize时))
            调用reject拒绝接受任务
            reject(command);

Este artículo se transfiere desde https://xie.infoq.cn/article/ 29b6ca1c907a80b7d6149897b

[ Difusión de conocimientos, valor compartido ], gracias amigos por su atención y apoyo, soy [ Zhuge Xiaoyuan ], un trabajador migrante de Internet que lucha en sus dudas.

Supongo que te gusta

Origin blog.csdn.net/wuxiaolongah/article/details/109520771
Recomendado
Clasificación