Subprocesos y subprocesamiento

El multithreading le permite aumentar la capacidad de respuesta de su aplicación y, en el caso de que la aplicación se ejecute en un sistema con varios procesadores o núcleos, aumentar su rendimiento.

Procesos y subprocesos

Un proceso es un programa en ejecución. Un sistema operativo utiliza procesos para separar las aplicaciones que se están ejecutando. Un subproceso es la unidad básica a la que el sistema operativo asigna tiempo de procesador. Cada subproceso tiene una prioridad de programación y mantiene un conjunto de estructuras que el sistema usa para guardar el contexto del subproceso mientras la ejecución del subproceso está pausada. El contexto del subproceso incluye toda la información que el subproceso necesita para reanudar sin problemas la ejecución, incluido el conjunto de pila y registros de CPU del subproceso. Dentro de un proceso, se pueden ejecutar varios subprocesos. Todos los subprocesos de un proceso comparten su espacio de direcciones virtuales. Un subproceso puede ejecutar cualquier parte del código de programa, incluidas las partes que esté ejecutando otro subproceso.

Nota

.NET Framework proporciona una manera de aislar las aplicaciones dentro de un proceso mediante el uso de dominios de la aplicación. Los dominios de aplicación no están disponibles en .NET Core. Para obtener más información, vea la sección Dominios de aplicación y subprocesos del artículo Dominios de aplicación.

De forma predeterminada, un programa de .NET se inicia con un único subproceso, que se suele conocer como subproceso principal. Sin embargo, puede crear subprocesos adicionales para ejecutar código en paralelo o simultáneamente con el subproceso principal. Normalmente, estos subprocesos se denominan subprocesos de trabajo.

Cuándo utilizar varios subprocesos

Utilice varios subprocesos para aumentar la capacidad de respuesta de la aplicación y aprovechar las ventajas de un sistema con varios procesadores o núcleos que le permita aumentar el rendimiento de la aplicación.

Le recomendamos que use una aplicación de escritorio en la que el subproceso principal sea responsable de los elementos de la interfaz de usuario e interactivo. Use subprocesos de trabajo para realizar operaciones complejas que ocuparían el subproceso principal e impedirían la interacción con la interfaz de usuario. También puede usar un subproceso dedicado para la comunicación mediante red o dispositivo, de modo que su capacidad de respuesta ante los mensajes y eventos entrantes sea mayor.

Si el programa realiza operaciones que pueden realizarse en paralelo, puede reducir el tiempo de ejecución total realizándolas en subprocesos separados y ejecutando el programa en un sistema con varios procesadores o núcleos. En un sistema de este tipo, el uso del mutithreading puede aumentar el rendimiento y la capacidad de respuesta.

Cómo usar el multithreading en .NET

A partir de .NET Framework 4, la forma recomendada de usar el multithreading consiste en emplear las bibliotecas TPL y PLINQ. Para obtener más información, vea Programación en paralelo.

Las bibliotecas TPL y PLINQ se basan en los subprocesos de ThreadPool. La clase System.Threading.ThreadPool proporciona una aplicación .NET con un grupo de subprocesos de trabajo. También puede usar grupos de subprocesos. Para obtener más información, vea Grupo de subprocesos administrado.

Por último, puede usar la clase System.Threading.Thread que representa un subproceso administrado. Para obtener más información, vea Uso de subprocesos y subprocesamiento.

Puede que se necesiten varios subprocesos para acceder a un recurso compartido. Para mantener el recurso en un estado no dañado y evitar las condiciones de carrera, debe sincronizar el acceso del subproceso a este. También puede optar por coordinar la interacción en varios subprocesos. .NET proporciona una variedad de tipos que puede usar para sincronizar el acceso a un recurso compartido o coordinar la interacción de subprocesos. Para obtener más información, vea Información general sobre las primitivas de sincronización.

Controle las excepciones de los subprocesos. Las excepciones no controladas en los subprocesos suelen finalizar el proceso. Para más información, consulte Excepciones en subprocesos administrados.

Vea también