Grupo de subprocesos: en pocas palabras, un grupo de subprocesos es un lote de subprocesos creados por adelantado para manejar el negocio recibido de manera fácil y rápida. En comparación con la llegada tradicional de una tarea, cree instantáneamente un subproceso para tratar, ahorrando la sobrecarga de creación y reciclaje de subprocesos, una respuesta más rápida y una mayor eficiencia.
En linux, se usa la biblioteca de hilos Posix. Primero, se presentan varias funciones comúnmente usadas:
1 Funciones de creación y cancelación de subprocesos
pthread_create
Crear subprocesos
pthread_join
Fusionar subprocesos
pthread_cancel
Cancelar subprocesos
2 Funciones de sincronización de subprocesos
pthread_mutex_lock
pthread_mutex_unlock
pthread_cond_signal
pthread_cond_wait
Para obtener una descripción detallada de la función, consulte la página man
Implementación del grupo de hilos:
La implementación del conjunto de subprocesos se divide principalmente en tres partes, la creación de subprocesos, la adición de tareas al conjunto de subprocesos y la eliminación de tareas de la cola de tareas por parte del subproceso de trabajo.
Hay dos clases principales para implementar, CTask, CThreadPool
/**
Clases que realizan tareas, establecen datos de tareas y se ejecutan
** /
C Code
class CTask
{
protected:
string m_strTaskName; //Nombre de la tarea
void * m_ptrData; //datos específicos de la tarea a ejecutar
public:
CTask () {}
CTask (string taskName)
{
this- > m_strTaskName = taskName;
m_ptrData = NULL;
}
virtual int Run () = 0;
voDd SetData (void * data); //Establecer datos de tarea
};
La clase de tarea es una clase virtual, todas las tareas deben heredarse de la clase CTask, implementar la interfaz de ejecución, Lo que debe implementarse en la interfaz de ejecución es la lógica de la tarea de análisis específica. m_ptrData es un puntero a datos de tarea, ya sea un tipo de datos simple o un tipo de datos complejo personalizado.
Clase de grupo de subprocesos
/**
Grupo de subprocesos
** /
Código de Java
Clase
CThreadPool
{
privado:
vector < CTask * > m_vecTaskList; //lista de tareas
int m_iThreadNum; //iniciado en el grupo de subprocesos Subprocesos
vector estático < pthread_t > m_vecIdleThread; //colección de subprocesos inactivos actuales
vector estático < pthread_t > m_vecBusyThread; //colección de subprocesos en ejecución actualmente
static Pthread_mutex_t m_pthreadMutex; //bloqueo de sincronización de subprocesos
static pthread_cond_t m_pthreadCond; //variable condicional para sincronización de subprocesos
protected:
static void * ThreadFunc (void * threadData); //Nueva función de subproceso del hilo
static int MoveToIdle (pthread_t tid); //Coloca el hilo en el subproceso inactivo después de que el hilo termine de ejecutarse
static int MoveToBusy (pthread_t tid); /Mover a la línea ocupada Ir
Crea int (); //crear todos los hilos
pública:
CThreadPool (int threadNum);
int addTask (CTask * Tarea); //Agregar la tarea al grupo de subprocesos
int StopAll ();
};
Cuando se crea el objeto del grupo de subprocesos, inicie un lote de subprocesos y Coloque todos los subprocesos en la lista libre. Cuando llega una tarea, un subproceso toma la tarea y la procesa.
La sincronización entre subprocesos utiliza bloqueos de subproceso y variables de condición.
Hay dos interfaces externas para esta clase:
La función AddTask agrega la tarea a la lista de tareas del grupo de subprocesos y notifica al subproceso para procesarlo. Cuando llegue la tarea, colóquela en la lista de tareas m_vecTaskList y active un hilo con pthread_cond_signal para su procesamiento.
La función StopAll detiene todos los subprocesos
código Cpp
************************ ************************
Código:
× × × × × × y los tiempos; &veces; &veces; &veces; &veces; &veces; &veces; &veces; &veces; &veces; &veces; &veces; &veces; &veces; CThread.h
#ifndef __CTHREAD
#define __CTHREAD
# include < vector >
# include < string >
# include < pthread.h >
using namespace std;
/**
Clase para ejecutar tareas, configurar datos de tareas y ejecutar
** /
clase CTask
{
protegida:
string m_strTaskName; //nombre de la tarea
void * m_ptrData; //tarea que desea realizar los datos específicos
pública:
CTask () {}
CTask (cadena taskName)
{
this- > m_strTaskName = taskName;
m_ptrData = NULL;
}
virtual int Run () = 0;
vacío SetData (void * data); //establecer los datos de las tareas
};
/**
Grupo de subprocesos
** /
clase CThreadPool
{
privado:
vector < CTask * > m_vecTaskList; //lista de tareas
int m_iThreadNum; //iniciar los hilos de rosca de la piscina
vector estática < pthread_t > m_vecIdleThread; //hilo actualmente inactivo establecer
vector estática < pthread_t > m_vecBusyThread;
//conjunto de hilos Actualmente ejecutoras
estática m_pthreadMutex pthread_mutex_t; //bloqueo de sincronización hilo
pthread_cond_t estática m_pthreadCond; //hilo
condición de sincronización variable de
protegida:
static void * ThreadFunc (void * threadData); //función nuevo hilo de rosca
static int MoveToIdle (tid pthread_t); //Una vez que el hilo termine de ejecutarse, colóquese en la línea inactiva En
static int MoveToBusy (tid pthread_t); //se trasladó a un hilo ocupado para
int Crear (); //crear todos los hilos
pública:
CThreadPool (int threadNum);
int addTask (CTask tarea *); //añadir tareas en el grupo de subprocesos
Muchos usuarios que son nuevos en Linux usarán el concepto de Windows para entender el sis
. En la administración de hardware de ITDB, los usuarios deben asignarse a hardware. Este usuario qu
La siguiente carpeta en el escritorio se comparte como una carpeta compartida para el siste
La instalación de JDK solo necesita solucionar dos problemas, el directorio de instalación
Contraseña de Linuxssh sesión gratis
Base de sistema de archivos de Linux
7 comandos para verificar y recopilar información de hardware de Linux
Archivos de Linux: ls, cp, mv, rm
Nunca ejecute los 10 comandos más peligrosos en Linux
Consejos prácticos sobre Linux: use ntfs-3g para montar dispositivos ntfs
Gestión de usuarios y grupos de usuarios de Linux
Ventana 8 características experiencia
Cómo jugar enrutamiento mijo en un instante
Las últimas cinco técnicas de piratería en caliente
Método de apagado del controlador de instalación automática de Win7
Aprenda a iniciar el programa de administración de pantalla con Win 8
Ejemplo de operación de comando del sistema Linux