Subprocesos y subprocesamientoThreads and threading

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.Multithreading allows you to increase the responsiveness of your application and, if your application runs on a multiprocessor or multi-core system, increase its throughput.

Procesos y subprocesosProcesses and threads

Un proceso es un programa en ejecución.A process is an executing program. Un sistema operativo utiliza procesos para separar las aplicaciones que se están ejecutando.An operating system uses processes to separate the applications that are being executed. Un subproceso es la unidad básica a la que el sistema operativo asigna tiempo de procesador.A thread is the basic unit to which an operating system allocates processor time. 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.Each thread has a scheduling priority and maintains a set of structures the system uses to save the thread context when the thread's execution is paused. 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.The thread context includes all the information the thread needs to seamlessly resume execution, including the thread's set of CPU registers and stack. Dentro de un proceso, se pueden ejecutar varios subprocesos.Multiple threads can run in the context of a process. Todos los subprocesos de un proceso comparten su espacio de direcciones virtuales.All threads of a process share its virtual address space. Un subproceso puede ejecutar cualquier parte del código de programa, incluidas las partes que esté ejecutando otro subproceso.A thread can execute any part of the program code, including parts currently being executed by another thread.

Nota

.NET Framework proporciona una manera de aislar las aplicaciones dentro de un proceso mediante el uso de dominios de aplicación.The .NET Framework provides a way to isolate applications within a process with the use of application domains. 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.(Application domains are not available on .NET Core.) For more information, see the Application domains and threads section of the Application domains article.

De forma predeterminada, un programa de .NET se inicia con un único subproceso, que se suele conocer como subproceso principal.By default, a .NET program is started with a single thread, often called the primary thread. Sin embargo, puede crear subprocesos adicionales para ejecutar código en paralelo o simultáneamente con el subproceso principal.However, it can create additional threads to execute code in parallel or concurrently with the primary thread. Normalmente, estos subprocesos se denominan subprocesos de trabajo.These threads are often called worker threads.

Cuándo utilizar varios subprocesosWhen to use multiple threads

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.You use multiple threads to increase the responsiveness of your application and to take advantage of a multiprocessor or multi-core system to increase the application's throughput.

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.Consider a desktop application, in which the primary thread is responsible for user interface elements and responds to user actions. 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.Use worker threads to perform time-consuming operations that, otherwise, would occupy the primary thread and make the user interface non-responsive. 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.You also can use a dedicated thread for network or device communication to be more responsive to incoming messages or events.

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.If your program performs operations that can be done in parallel, the total execution time can be decreased by performing those operations in separate threads and running the program on a multiprocessor or multi-core system. En un sistema de este tipo, el uso del mutithreading puede aumentar el rendimiento y la capacidad de respuesta.On such a system, use of multithreading might increase throughput along with the increased responsiveness.

Cómo usar el multithreading en .NETHow to use multithreading in .NET

A partir de .NET Framework 4, el método recomendado para utilizar el multithreading es usar las bibliotecas TPL y PLINQ.Starting with the .NET Framework 4, the recommended way to utilize multithreading is to use Task Parallel Library (TPL) and Parallel LINQ (PLINQ). Para obtener más información, vea Parallel Programming (Programación en paralelo).For more information, see Parallel programming.

Las bibliotecas TPL y PLINQ se basan en los subprocesos de ThreadPool.Both TPL and PLINQ rely on the ThreadPool threads. La clase System.Threading.ThreadPool proporciona una aplicación .NET con un grupo de subprocesos de trabajo.The System.Threading.ThreadPool class provides a .NET application with a pool of worker threads. También puede usar grupos de subprocesos.You also can use thread pool threads. Para obtener más información, vea Grupo de subprocesos administrado.For more information, see The managed thread pool.

Por último, puede usar la clase System.Threading.Thread que representa un subproceso administrado.At last, you can use the System.Threading.Thread class that represents a managed thread. Para obtener más información, vea Uso de subprocesos y subprocesamiento.For more information, see Using threads and threading.

Puede que se necesiten varios subprocesos para acceder a un recurso compartido.Multiple threads might need to access a shared resource. Para mantener el recurso en un estado no dañado y evitar las condiciones de carrera, debe sincronizar el acceso del subproceso a este.To keep the resource in a uncorrupted state and avoid race conditions, you must synchronize the thread access to it. También puede optar por coordinar la interacción en varios subprocesos.You also might want to coordinate the interaction of multiple threads. .NET proporciona una variedad de tipos que puede usar para sincronizar el acceso a un recurso compartido o coordinar la interacción de subprocesos..NET provides a range of types that you can use to synchronize access to a shared resource or coordinate thread interaction. Para obtener más información, vea Información general sobre las primitivas de sincronización.For more information, see Overview of synchronization primitives.

Controle las excepciones de los subprocesos.Do handle exceptions in threads. Las excepciones no controladas en los subprocesos suelen finalizar el proceso.Unhandled exceptions in threads generally terminate the process. Para más información, consulte Excepciones en subprocesos administrados.For more information, see Exceptions in managed threads.

Vea tambiénSee also