Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Multithreading permite aumentar la capacidad de respuesta de la aplicación y, si la aplicación se ejecuta en un sistema multiprocesador o de varios núcleos, aumente su rendimiento.
Procesos y subprocesos
Un proceso es un programa en ejecución. Un sistema operativo usa procesos para separar las aplicaciones que se ejecutan. Un subproceso es la unidad básica a la que un sistema operativo asigna tiempo de procesador. Cada subproceso tiene una prioridad de programación y mantiene un conjunto de estructuras que usa el sistema para guardar el contexto del subproceso cuando se pausa la ejecución del subproceso. El contexto del subproceso incluye toda la información que el subproceso necesita para reanudar la ejecución sin problemas, incluido el conjunto de registros y la pila de CPU del subproceso. Dentro de un proceso, se pueden ejecutar varios subprocesos. Todos los subprocesos de un proceso comparten su espacio de direcciones virtual. Un subproceso puede ejecutar cualquier parte del código del programa, incluidos los elementos que está ejecutando actualmente otro subproceso.
Nota:
.NET Framework proporciona una manera de aislar las aplicaciones dentro de un proceso con el uso de dominios de aplicación. (Los dominios de aplicación no están disponibles en .NET Core). Para obtener más información, consulte la sección Dominios de aplicación y subprocesos del artículo Dominios de aplicación .
De forma predeterminada, un programa .NET se inicia con un único subproceso, a menudo denominado 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 usar varios hilos
Use varios subprocesos para aumentar la capacidad de respuesta de la aplicación y aprovechar un sistema multiprocesador o de varios núcleos para aumentar el rendimiento de la aplicación.
Considere una aplicación de escritorio, en la que el subproceso principal es responsable de los elementos de la interfaz de usuario y responde a las acciones del usuario. Use subprocesos de trabajo para realizar operaciones que, de lo contrario, ocuparían el subproceso principal y harían que la interfaz de usuario no respondiera. 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 se pueden realizar en paralelo, el tiempo total de ejecución se puede reducir realizando esas operaciones en subprocesos independientes y ejecutando el programa en un sistema multiprocesador o de varios núcleos. En este tipo de sistema, el uso de multithreading puede aumentar el rendimiento junto con la mayor capacidad de respuesta.
Cómo usar el multithreading en .NET
A partir de .NET Framework 4, la manera recomendada de usar multithreading es usar la biblioteca paralela de tareas (TPL) y Parallel LINQ (PLINQ). Para obtener más información, consulte Programación paralela.
Tanto TPL como PLINQ dependen de los ThreadPool subprocesos. La System.Threading.ThreadPool clase 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 System.Threading.Thread clase que representa un subproceso administrado. Para obtener más información, vea Uso de subprocesos y subprocesamiento.
Es posible que varios subprocesos necesiten 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 Introducción a los primitivos de sincronización.
Controle las excepciones de los subprocesos. Las excepciones no controladas en los hilos generalmente finalizan el proceso. Para más información, consulte Excepciones en subprocesos administrados.