Wątki i wątki
Wielowątkowość umożliwia zwiększenie czasu reakcji aplikacji i, jeśli aplikacja działa w systemie wieloprocesorowym lub wielordzeniowym, zwiększa przepływność.
Procesy i wątki
Proces jest programem wykonującym. System operacyjny używa procesów do oddzielania wykonywanych aplikacji. Wątek to podstawowa jednostka, do której system operacyjny przydziela czas procesora. Każdy wątek ma priorytet planowania i utrzymuje zestaw struktur używanych przez system do zapisywania kontekstu wątku po wstrzymaniu wykonywania wątku. Kontekst wątku zawiera wszystkie informacje potrzebne wątkowi do bezproblemowego wznowienia wykonywania, w tym zestaw wątków rejestrów i stosu procesora CPU. W kontekście procesu można uruchomić wiele wątków. Wszystkie wątki procesu współdzielą swoją wirtualną przestrzeń adresową. Wątek może wykonać dowolną część kodu programu, w tym części aktualnie wykonywane przez inny wątek.
Uwaga
Program .NET Framework umożliwia izolowanie aplikacji w procesie przy użyciu domen aplikacji. (Domeny aplikacji nie są dostępne na platformie .NET Core). Aby uzyskać więcej informacji, zobacz sekcję Domeny aplikacji i wątki w artykule Domeny aplikacji .
Domyślnie program .NET jest uruchamiany z jednym wątkiem, często nazywanym wątkiem podstawowym . Można jednak utworzyć dodatkowe wątki do równoległego lub współbieżnego wykonywania kodu z wątkiem podstawowym. Te wątki są często nazywane wątkami roboczymi .
Kiedy należy używać wielu wątków
Używasz wielu wątków, aby zwiększyć czas reakcji aplikacji i skorzystać z wieloprocesorowego lub wielordzeniowego systemu w celu zwiększenia przepływności aplikacji.
Rozważ aplikację klasyczną, w której wątek podstawowy jest odpowiedzialny za elementy interfejsu użytkownika i reaguje na akcje użytkownika. Użyj wątków roboczych, aby wykonywać czasochłonne operacje, które w przeciwnym razie zajmują wątek podstawowy i sprawiają, że interfejs użytkownika nie odpowiada. Możesz również użyć dedykowanego wątku do komunikacji sieciowej lub urządzenia, aby szybciej reagować na przychodzące komunikaty lub zdarzenia.
Jeśli program wykonuje operacje, które można wykonać równolegle, całkowity czas wykonywania można zmniejszyć, wykonując te operacje w osobnych wątkach i uruchamiając program w systemie wieloprocesorowym lub wielordzeniowym. W takim systemie użycie wielowątków może zwiększyć przepływność wraz ze zwiększoną szybkością reakcji.
Jak używać wielowątków na platformie .NET
Począwszy od programu .NET Framework 4, zalecanym sposobem korzystania z wielowątku jest użycie biblioteki równoległej zadań (TPL) i równoległego LINQ (PLINQ). Aby uzyskać więcej informacji, zobacz Programowanie równoległe.
Zarówno TPL, jak i PLINQ bazują na ThreadPool wątkach. Klasa System.Threading.ThreadPool udostępnia aplikację .NET z pulą wątków roboczych. Można również użyć wątków puli wątków. Aby uzyskać więcej informacji, zobacz Zarządzana pula wątków.
Na koniec możesz użyć System.Threading.Thread klasy reprezentującej zarządzany wątek. Aby uzyskać więcej informacji, zobacz Używanie wątków i wątków.
Może być konieczne uzyskanie dostępu do zasobu udostępnionego przez wiele wątków. Aby zachować zasób w stanie bez awarii i uniknąć warunków wyścigu, należy zsynchronizować dostęp wątku do niego. Możesz również koordynować interakcję wielu wątków. Platforma .NET udostępnia szereg typów, których można użyć do synchronizowania dostępu do współużytkowanego zasobu lub współrzędnych interakcji wątku. Aby uzyskać więcej informacji, zobacz Omówienie elementów pierwotnych synchronizacji.
Obsługa wyjątków w wątkach. Nieobsługiwane wyjątki w wątkach zwykle kończą proces. Aby uzyskać więcej informacji, zobacz Wyjątki w zarządzanych wątkach.