¿En qué circunstancias se ejecutarían 100 procesos del sistema operativo más rápido en 5 lotes en serie de 20 en lugar de todos en paralelo?

Depende de cuántos procesadores tenga, cuánta RAM tenga y la presión sobre otros recursos.

Si tiene 5 procesadores, puede obtener o no un aumento en el rendimiento al ejecutar más de 5 procesos a la vez. Es posible que aumente el rendimiento porque el núcleo puede cambiar procesos mientras esperan RAM y ejecutar procesos que ya tienen sus datos. En la actualidad, muchos procesadores también tienen soporte de hardware para más de un subproceso, los procesadores SPARC modernos, por ejemplo, admiten 8 subprocesos por núcleo a nivel de hardware.

Puede obtener un rendimiento peor debido al costo de un cambio de contexto, es decir, cambiar los subprocesos en un procesador lleva tiempo, y si lo está haciendo mucho, puede sumar.

Luego tiene otros recursos como RAM y disco, si termina usando mucho espacio de intercambio, es una carga más lenta que la RAM física y ocupa el ancho de banda del disco que necesita en otros lugares.

Piense en procesos como los automóviles y el sistema de carreteras como la computadora. Si pones más autos en las carreteras de los que las carreteras pueden manejar, terminas con autos / procesos que pasan mucho tiempo esperando su turno en los cruces.

Multi-threading es atrozmente complicado. Hay innumerables formas en las que modificar aspectos particulares de su programa afectará el rendimiento. Aquí hay algunos que vienen a la mente:

Desea exactamente un hilo por cable (suponiendo que sus hilos pasen la mayor parte del tiempo trabajando tan duro como puedan). La eficiencia mejora rápidamente a medida que agrega más subprocesos hasta llegar al conteo del núcleo físico; después de eso, la eficiencia disminuye lentamente. La disminución se debe al gasto adicional de intercambio entre hilos todo el tiempo. Entonces, si tiene exactamente cinco núcleos, cinco lotes de veinte probablemente sea una buena idea (advertencia: si sus tareas son de longitud variable, puede perder algo de tiempo esperando a los rezagados mientras algunos núcleos hacen girar sus pulgares; tenga cuidado).

Aísle el acceso a la memoria para evitar colisiones de caché . Esto es complicado. Si dos núcleos diferentes intentan escribir en la misma área de memoria, dejan todo lo que están haciendo e invitan a todos a una fiesta de té para decidir quién escribió qué y cuándo. Las fiestas del té llevan años (el término real es colisiones de caché), así que evítelas. Cada hilo debe tener su propia área aislada para anotar sus resultados. Recoja los resultados en lotes más tarde.

Si todos los subprocesos funcionan en la misma memoria, verá una mejora modesta en el rendimiento si el procesamiento por lotes reduce la aparición de fiestas de té (por ejemplo, colisiones de caché).

Las tareas pequeñas no valen el subprocesamiento múltiple . Poner en marcha un hilo es bastante lento; Si el trabajo que realiza el subproceso es menor que el costo de iniciar un subproceso, verá una ganancia por lotes para reducir el recuento de subprocesos.

Esperar cerraduras es un desperdicio . Realmente desea evitar la necesidad de cerraduras en absoluto; todos los hilos pueden leer un área de datos comunes constantes sin un bloqueo, pero si tienen que escribir en un área común, necesita un bloqueo. Si su problema requiere bloqueos, trabaje duro para asegurarse de que los hilos casi siempre agarren el bloqueo con éxito en su primer intento; haga que sus secciones críticas sean muy rápidas e idealmente raras. Si puede agrupar algunas solicitudes antes de solicitar un bloqueo, esto podría reducir la contención y aumentar su rendimiento. Entonces ese es otro caso donde los lotes pueden ganar.

Eso es todo lo que tengo. En la práctica, debes medir todo y realizar experimentos; ¡Su problema podría comportarse de manera muy diferente al mío!

Si tiene 20 núcleos y los trabajos están todos vinculados al procesador (es decir, no se bloquean en E / S), el segundo escenario será más rápido. Ejecutar 100 procesos a la vez en esta situación solo causará mucha espera.

Sin embargo, es poco probable que sea la situación en la que se encuentra. Lo más probable es que tenga un número más moderado de núcleos (seamos generosos y digamos 8) y su trabajo bloquea la E / S. En este caso, debido a que los procesos se bloquean, puede ejecutar más de ellos que los núcleos a la vez. Cuántos, exactamente, depende. Es concebible que pueda ejecutar 100 trabajos en paralelo con un rendimiento decente y obtener mejores resultados que 5 lotes en serie de 20.

En pocas palabras: depende de la cantidad de procesadores y tipos de procesos (enlazados de E / S, enlazados a la CPU). Asumiremos por el argumento de que la RAM no es un problema. La única forma de saberlo con certeza es probar variaciones y ver qué funciona mejor en su caso.

More Interesting

¿Qué lenguaje de programación debería aprender alguien si nunca antes ha programado pero quiere buscar un mercado laboral alternativo?

¿Qué es mejor para una informática más fresca, DE Shaw o Goldman Sachs?

¿Está muerto el lenguaje de auto programación?

¿Qué carrera es mejor a largo plazo, como chef o como ingeniero informático?

¿Cuál será el futuro de la industria de TI y la ingeniería informática en India después de solo 4 años?

¿Hay alguna posibilidad de recesión en la ingeniería informática después de 5 años?

En India, si tuviera la opción de hacer un curso completo de Java, ¿dónde postularía?

¿Es factible el concepto de una computadora óptica (una computadora que computa controlando, a diferencia de la electricidad)?

¿Estaré en desventaja al estudiar ingeniería informática en lugar de ingeniería eléctrica?

¿Qué universidad, de las que me aceptan, es la mejor para la ingeniería? Soy aceptado en la Universidad de Boston, la Universidad de Illinois en Urbana Champaign, la Universidad de Toronto y Tufts. Espero asistir a una Ivy League para un posgrado.

¿Son las unidades de sistema en forma de cilindro el mejor diseño de enfriamiento?

¿Cuáles son las diez mejores universidades de ingeniería informática en Chennai?

Ingenieros Eléctricos / Computadores / Hardware que han cambiado a Ingeniería de Software: ¿Cómo ha sido su cambio de carrera? ¿Feliz con el interruptor?

¿Por dónde empiezo y qué pasos tomo para abrirme al mundo de la Ingeniería Informática y el Desarrollo de Software y ser excelente en eso?

¿Cómo es ir a estudiar ingeniería informática en Finlandia?