Utilizar el subprocesamiento (Guía de programación de C#)

Actualización: noviembre 2007

De forma predeterminada, un programa de C# tiene un subproceso. Este subproceso ejecuta el código del programa que comienza y finaliza con el método Main. Cada comando ejecutado por Main (directamente o indirectamente) es realizado por el subproceso predeterminado, o primario, y este subproceso finaliza cuando llega de nuevo a Main. Sin embargo, se pueden crear subprocesos auxiliares para ejecutar código en paralelo con el subproceso primario. Estos subprocesos se denominan a menudo subprocesos de trabajo.

Los subprocesos de trabajo se pueden utilizar para realizar tareas que llevan mucho tiempo o en las que el tiempo es crucial, sin acaparar el subproceso primario. Por ejemplo, los subprocesos de trabajo se utilizan a menudo en aplicaciones de servidor para atender las solicitudes entrantes sin esperar a que la solicitud anterior haya completado. Los subprocesos de trabajo también se utilizan para realizar tareas "en segundo plano" en aplicaciones de escritorio a fin de que el subproceso principal, que controla los elementos de la interfaz de usuario, siga respondiendo a las acciones del usuario.

El subprocesamiento múltiple resuelve los problemas de rendimiento y velocidad de respuesta, pero también presenta problemas de uso compartido de recursos, como interbloqueos y condiciones de carrera. Es mejor utilizar varios subprocesos para tareas que requieran recursos diferentes como identificadores de archivos, conexiones de red, etc. Asignar varios subprocesos a un único recurso probablemente produciría problemas de sincronización, y el bloqueo frecuente de los subprocesos cuando esperan la finalización de otros subprocesos invalida la finalidad de utilizar varios subprocesos.

Una estrategia común es utilizar subprocesos de trabajo para realizar tareas que llevan mucho tiempo o en las que el tiempo es crucial y que no requieran muchos de los recursos utilizados por otros subprocesos. Naturalmente, a algunos recursos del programa deberán tener acceso varios subprocesos. Es estos casos, el espacio de nombres System.Threading proporciona clases para sincronizar los subprocesos. Estas clases incluyen Mutex, Monitor, Interlocked, AutoResetEvent y ManualResetEvent.

Puede utilizar algunas de estas clases, o todas ellas, para sincronizar las actividades de varios subprocesos, pero el lenguaje C# proporciona una parte de la compatibilidad necesaria para el subprocesamiento múltiple. Por ejemplo, la instrucción lock proporciona características de sincronización a través del uso implícito de Monitor.

En los temas siguientes se muestran técnicas del subprocesamiento múltiple comunes:

Secciones relacionadas

Para obtener más información, vea:

Vea también

Tareas

Ejemplo Monitor Synchronization Technology

Ejemplo Wait Synchronization Technology

Ejemplo de subprocesamiento

Conceptos

Guía de programación de C#

Monitores

Operaciones de bloqueo

AutoResetEvent

Referencia

Thread

Mutex

Otros recursos

Subprocesamiento administrado

Utilizar subprocesos y subprocesamiento

Ejemplos de subprocesamiento