es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe algún beneficio en el rendimiento al usar un grupo de hilos en lugar de simplemente crear hilos?

Me preguntaba si hay beneficios de rendimiento al utilizar un grupo de hilos en lugar de simplemente crear hilos y permitir que el sistema operativo los encole y los planifique.

Supongamos que tengo 20 hilos disponibles y tengo 60 tareas que quiero ejecutar en estos hilos, algo como esto:

void algunaTarea() {
  // ... realiza alguna tarea
}

// supongamos que std::thread::hardware_concurrency() = 20

std::vector<std::thread> hilos;
for (int i = 0; i < 60; i++) {
  hilos.push_back(std::thread(algunaTarea));
}

std::for_each(hilos.begin(), hilos.end(), [](std::thread& x){x.join();});

¿Hay algún beneficio en lugar de crear un grupo con 20 hilos y asignar a cada uno otra ‘tarea’ cuando un hilo queda libre? Asumo que hay ciertos costos adicionales al iniciar un hilo, pero ¿existen otros beneficios al crear un grupo para este tipo de problema?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay beneficios de rendimiento al utilizar un pool de hilos en lugar de crear hilos individualmente.

    Cuando se crean hilos individualmente, hay una sobrecarga asociada con la creación y destrucción de los hilos. Además, el planificador del sistema operativo debe administrar los hilos, lo que puede llevar tiempo y recursos. Si hay más hilos que procesadores disponibles, algunos hilos pueden quedarse esperando tiempo de CPU, lo que lleva a ineficiencias.

    Sin embargo, al crear un pool de hilos y asignar tareas a los hilos disponibles, se reduce al mínimo la sobrecarga de creación y destrucción de hilos. Además, el pool se puede optimizar para limitar el número de hilos activos al número de procesadores disponibles, reduciendo la sobrecarga de planificación. Además, las tareas se pueden asignar a los hilos de manera más eficiente, reduciendo el tiempo de CPU desperdiciado.

    En general, un pool de hilos puede mejorar significativamente el rendimiento de tareas concurrentes al reducir la sobrecarga y maximizar el uso de los recursos disponibles.

Comments are closed.