Threads e threadingThreads and threading

O multithreading permite aumentar a capacidade de resposta do seu aplicativo e, se esse aplicativo é executado em um sistema com vários processadores ou vários núcleos, permite também aumentar sua taxa de transferência.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.

Processos e threadsProcesses and threads

Um processo é um programa em execução.A process is an executing program. Um sistema operacional usa processos para separar os aplicativos que estão sendo executados.An operating system uses processes to separate the applications that are being executed. Um thread é a unidade básica para a qual um sistema operacional aloca tempo do processador.A thread is the basic unit to which an operating system allocates processor time. Cada thread tem uma prioridade de agendamento e mantém um conjunto de estruturas que o sistema usa para salvar o contexto do thread quando a execução do thread é colocada em pausa.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. O contexto de thread inclui todas as informações que o thread precisa para continuar a execução sem interrupções, incluindo o conjunto de registros de CPU e pilha do thread.The thread context includes all the information the thread needs to seamlessly resume execution, including the thread's set of CPU registers and stack. Vários threads podem ser executados no contexto de um processo.Multiple threads can run in the context of a process. Todos os threads de um processo compartilham seu espaço de endereço virtual.All threads of a process share its virtual address space. Um thread pode executar qualquer parte do código do programa, incluindo partes que estão sendo executadas no momento por outro thread.A thread can execute any part of the program code, including parts currently being executed by another thread.

Observação

.NET Framework fornece uma maneira de isolar aplicativos em um processo com o uso de domínios de aplicativo..NET Framework provides a way to isolate applications within a process with the use of application domains. (Os domínios de aplicativo não estão disponíveis no .NET Core.) Para obter mais informações, consulte a seção domínios e threads do aplicativo do artigo domínios de aplicativo .(Application domains are not available on .NET Core.) For more information, see the Application domains and threads section of the Application domains article.

Por padrão, um programa .NET é iniciado com um único thread, geralmente chamado de thread primário.By default, a .NET program is started with a single thread, often called the primary thread. No entanto, ele pode criar threads adicionais para executar código em paralelo ou simultaneamente com o thread primário.However, it can create additional threads to execute code in parallel or concurrently with the primary thread. Esses threads costumam ser chamados de threads de trabalho .These threads are often called worker threads.

Quando usar vários threadsWhen to use multiple threads

Você usa vários threads para aumentar a capacidade de resposta do seu aplicativo e para aproveitar um sistema com vários processadores ou vários núcleos para aumentar a taxa de transferência do aplicativo.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.

Considere um aplicativo da área de trabalho em que o thread primário é responsável por elementos da interface do usuário e responde às ações do usuário.Consider a desktop application, in which the primary thread is responsible for user interface elements and responds to user actions. Use threads de trabalho para executar operações demoradas que, caso contrário, ocupariam o thread primário e fariam com que a interface do usuário parasse de responder.Use worker threads to perform time-consuming operations that, otherwise, would occupy the primary thread and make the user interface non-responsive. Você também pode usar um thread dedicado para comunicação de rede ou dispositivo para ser mais responsivo a mensagens ou eventos de entrada.You can also use a dedicated thread for network or device communication to be more responsive to incoming messages or events.

Se o programa realiza operações que podem ser executadas em paralelo, o tempo de execução total pode ser diminuído executando essas operações em threads separados e executando o programa em um sistema com vários processadores ou vários 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. Em um sistema desse tipo, o uso de multithreading pode resultar aumentar a taxa de transferência, além de uma maior capacidade de resposta.On such a system, use of multithreading might increase throughput along with the increased responsiveness.

Como usar multithreading em .NETHow to use multithreading in .NET

A partir do .NET Framework 4, a maneira recomendada de utilizar multithreading é usar a TPL (biblioteca paralela de tarefas) e o Parallel LINQ (PLINQ).Starting with .NET Framework 4, the recommended way to utilize multithreading is to use Task Parallel Library (TPL) and Parallel LINQ (PLINQ). Para obter mais informações, veja Programação paralela.For more information, see Parallel programming.

Tanto TPL quanto PLINQ contam com os threads ThreadPool.Both TPL and PLINQ rely on the ThreadPool threads. A classe System.Threading.ThreadPool fornece um pool de threads de trabalho a um aplicativo .NET.The System.Threading.ThreadPool class provides a .NET application with a pool of worker threads. Você também pode usar threads de pool de threads.You can also use thread pool threads. Para obter mais informações, veja O pool de threads gerenciados.For more information, see The managed thread pool.

Por fim, você pode usar a classe System.Threading.Thread, que representa um thread gerenciado.At last, you can use the System.Threading.Thread class that represents a managed thread. Para obter mais informações, veja Usando threads e threading.For more information, see Using threads and threading.

É possível que vários threads precisem acessar um recurso compartilhado.Multiple threads might need to access a shared resource. Para manter o recurso em um estado não corrompido e evitar condições de corrida, você precisa sincronizar o acesso dos threads a ele.To keep the resource in a uncorrupted state and avoid race conditions, you must synchronize the thread access to it. Também pode ser conveniente coordenar a interação de vários threads.You also might want to coordinate the interaction of multiple threads. O .NET fornece uma variedade de tipos que você pode usar para sincronizar o acesso a um recurso compartilhado ou coordenar a interação de thread..NET provides a range of types that you can use to synchronize access to a shared resource or coordinate thread interaction. Para obter mais informações, veja Visão geral dos primitivos de sincronização.For more information, see Overview of synchronization primitives.

Não se esqueça de tratar as exceções nos threads.Do handle exceptions in threads. Exceções sem tratamento nos threads geralmente encerram o processo.Unhandled exceptions in threads generally terminate the process. Para obter mais informações, veja Exceções em threads gerenciados.For more information, see Exceptions in managed threads.

Confira tambémSee also