c++ multithreading boost-asio boost-thread

c++ - boost:: threadpool:: pool vs.boost:: thread_group



multithreading boost-asio (1)

boost::thread_group es una clase de conveniencia para realizar operaciones de administración de subprocesos en una colección de subprocesos. Por ejemplo, en lugar de tener que iterar sobre std::vector<boost::thread> , invocando join() en cada subproceso, el thread_group proporciona una conveniente función de miembro join_all() .

Con boost::thread , independientemente de que sea administrado por boost::thread_group , la vida útil del hilo a menudo depende del trabajo en el que se realiza el hilo. Por ejemplo, si se crea un subproceso para realizar un cálculo costoso computacionalmente, el subproceso puede salir una vez que se haya calculado el resultado. Si el trabajo es de corta duración, la sobrecarga de crear y destruir subprocesos puede afectar el rendimiento.

Por otro lado, un conjunto de threadpool es un patrón, donde varios subprocesos threadpool una cantidad de tareas / trabajos. La duración del hilo no está directamente asociada con la duración de la tarea. Para continuar con el ejemplo anterior, la aplicación programaría el cálculo costoso computacionalmente para ejecutarse dentro del grupo de subprocesos. El trabajo se pondrá en cola dentro del conjunto de subprocesos y se seleccionará uno de los subprocesos del conjunto de subprocesos para realizar el trabajo. Una vez que el cálculo se ha completado, el hilo vuelve a esperar a que se programe más trabajo con el conjunto de hilos.

Como se muestra en este ejemplo de conjunto de threadpool , se puede implementar un conjunto de subprocesos con boost::thread_group para administrar la vida útil de los subprocesos, y boost::asio::io_service para el boost::asio::io_service de tareas / trabajos.

Estoy tratando de entender los diferentes casos de uso. y la diferencia entre los 2 usos de hilo. This es un excelente tutorial que he leído que explica boost::thread_group .

y aquí hay un código que estoy usando:

boost::threadpool::pool s_ThreadPool(GetCoreCount()); CFilterTask task(pFilter, // filter to run boost::bind(&CFilterManagerThread::OnCompleteTask, this, _1, _2) // OnComplete sync callback // _1 will be filter name // _2 will be error code ); // schedule the new task - runs on the threadpool s_ThreadPool.schedule(task);

este es el destructor

s_ThreadPool.wait(0);

¿Puede usted explicar por favor?