threading que juegos hilos ejemplos desactivado activar activado multithreading concurrency

multithreading - que - ¿Tiene sentido generar más de un hilo por procesador?



hyper threading intel activar (9)

Cada vez que tiene una tarea esperando una operación de E / S, tiene sentido encerrarla en un hilo y activarla. Hay una gran probabilidad de que su hilo se suspenda mientras espera que finalice la operación de E / S. Cuando se despierte, el resultado estará esperándolo.

Desde un punto de vista lógico, una aplicación puede necesitar docenas o cientos de hilos, algunos de los cuales dormiremos la mayor parte del tiempo, pero muy pocos siempre se ejecutarán simultáneamente. La pregunta es: ¿tiene sentido generar más hilos concurrentes que los procesadores que hay en un sistema, o es un desperdicio?

He visto algunas aplicaciones de servidor que implementan un programador para administrar lógicamente las tareas (a menudo llamadas trabajos), pero también generan muchos hilos, por lo que no veo dónde está el beneficio.

Gracias por adelantado.


Esto puede tener sentido si

  1. los beneficios de diseño de su programa, ya que tiene tareas paralelas que se implementan mejor en subprocesos, o

  2. algunos de sus subprocesos están vinculados a E / S, por lo que no utilizan los procesadores / núcleos por su cuenta.


La respuesta corta es "sí".

Aunque creas que puedes obtener más del multihilo en un entorno de multiprocesador, sigue siendo una tecnología útil en una sola máquina procesadora, principalmente porque significa que delegarás algo de trabajo al programador del proceso, que debería tener mucha más información de la que tienes.

Si no multithread, terminará haciendo el trabajo de programación usted mismo, lo que podría ser una buena cosa si eso es lo que necesita, pero probablemente será tedioso e ineficiente.


Otros han hablado de situaciones en las que casi seguramente tiene sentido (cuando estás haciendo cualquier tipo de IO lenta).

Puede que no sea ​​una buena idea si:

  • tus hilos están haciendo un trabajo de CPU

y

  • los hilos cada uno quiere usar mucho (es decir, significativo en comparación con el tamaño del caché) de la memoria que no se superpone

En este caso, existe la posibilidad de causar fallas de caché innecesarias.


Por supuesto. Si su software hace un uso frecuente de disco o red IO, a menudo puede mejorar el rendimiento agregando algunos hilos más. Esos hilos adicionales estarán despiertos y haciendo cosas mientras los otros hilos están bloqueando en IO.


Porque todos los sistemas operativos modernos son multitarea: cada hilo obtiene un tiempo compartido del procesador. En realidad, no es una ejecución simultánea, pero dado que el procesador puede manejar miles de solicitudes por segundo, es una ejecución simultánea "aparente".

Entonces, sí, si el caso lo necesita, tiene sentido utilizar múltiples hilos en un solo procesador.


Uno de los beneficios es cuando actualiza su hardware, que probablemente obtendrá más procesadores / núcleos.


Descubrí que al escribir analizadores de datos que manejan conjuntos más grandes de datos a través de una red, es mejor crear un hilo para cada letra del alfabeto (perteneciente a los datos) y lograr que el programa tenga más CPU y memoria encuadernada. La delimitación de E / S heredadas con las operaciones de red y disco es un cuello de botella importante por lo que también puede "comenzar" en los otros archivos de datos en lugar de hacer el trabajo secuencialmente.

En un núcleo cuádruple, sin duda tendría sentido iniciar más de cuatro hilos. Es poco probable que esos 4 hilos se distribuyan en más de uno de los núcleos, especialmente con las velocidades actuales del procesador.


Según Herb Sutter (uno de los principales expertos en simultaneidad), uno de los pilares de la simultaneidad es la receptividad y el aislamiento a través de agentes asíncronos . El resumen es:

Manténgase atento ejecutando tareas de forma independiente y tareas de forma asíncrona, comunicándose a través de mensajes.

Gran artículo (¡y la serie como un todo!). Todavía estoy esperando el libro.