Agregué C# y.NET etiquetas a su pregunta porque menciona C# en su título. Si eso no es exacto, siéntase libre de eliminar las etiquetas.
Existen diferentes estilos de subprocesamiento múltiple. Por ejemplo, hay operaciones asíncronas con funciones de devolución de llamada. .NET 4 introduce la biblioteca paralela de Linq. El estilo de multihilo que usarías, o si usarías alguno, depende de lo que intentas lograr.
La ejecución paralela, como por ejemplo lo que Linq generalmente intenta hacer, aprovecha múltiples núcleos de procesador ejecutando instrucciones que no necesitan esperar datos entre sí. Hay muchas fuentes para dichos algoritmos fuera de Linq, como this. Sin embargo, es posible que la ejecución en paralelo no le sea posible o que no sea adecuada para su aplicación.
El subprocesamiento múltiple más tradicional aprovecha el subprocesamiento dentro de la biblioteca .NET (en este caso) proporcionada por System.Thread
. Recuerde que hay algunos gastos generales en los procesos de inicio en los subprocesos, de modo que solo utilice los subprocesos cuando las ventajas de hacerlo superen esta sobrecarga. En general, solo desearía utilizar este tipo de subprocesamiento múltiple de un solo procesador cuando la tarea que se ejecuta bajo el hilo tenga largos espacios en los que el procesador podría estar haciendo otra cosa. Por ejemplo, las E/S del disco duro (y, en consecuencia, de un sistema de base de datos que usa una) son muchos órdenes de magnitud más lentos que el acceso a la memoria. El acceso a la red también puede ser lento, como otro ejemplo. El subprocesamiento múltiple podría permitir que se ejecute otro proceso mientras se espera que estas operaciones lentas (en comparación con el procesador) se completen.
Otro ejemplo cuando he usado el multithreading tradicional es almacenar en caché algunos valores la primera vez que se accede a una página ASP.NET en particular dentro de una sesión. Inicié un hilo para que el usuario no tenga que esperar a que se complete el almacenamiento en caché antes de interactuar con la página. También regulé el comportamiento cuando el almacenamiento en caché no se completa antes de que el usuario solicite otra página, de modo que, si el almacenamiento en caché no se completa, no es un problema. Simplemente hace más solicitudes más rápido que antes eran demasiado lentas.
Considere también el costo que tiene el multihilo para la mantenibilidad de su aplicación. Las aplicaciones con subprocesos pueden ser más difíciles de depurar, por ejemplo.
Espero que esto responda a su pregunta al menos de alguna manera.
¿Qué estás tratando de hacer realmente? Podría ser más fácil para nosotros decirle si los hilos ayudan a resolver su problema o no. De lo contrario, esta pregunta se ve como un candidato para "cerrar como una pregunta no real". –
Necesito estudiar el uso de multihebras para mi próximo cliente porque el líder de mi equipo lo solicitó. Pero primero estoy tratando de averiguar cuándo debería usar los hilos, por eso hice esta pregunta. Para ver cuándo otros desarrolladores utilizan subprocesos en "aplicaciones del mundo real". –
Me gusta ver escenarios de subprocesamiento múltiple desde una perspectiva de recursos. En otras palabras, interfaz de usuario (gráficos), redes, disco IO, CPU (núcleos), RAM, etc. Me parece que ayuda a la hora de decidir dónde usar multi-hilos en el sentido general al menos. Gran pregunta por cierto. noob o no :-) – bic