Pula wątków
W programowaniu komputerowym pula wątków to wzorzec projektowy oprogramowania służący do osiągnięcia współbieżności wykonywania w programie komputerowym. Pula wątków, często nazywana również zreplikowanymi pracownikami lub modelem pracownika-załogi , utrzymuje wiele wątków oczekujących na przydzielenie zadań do równoczesnego wykonanie przez program nadzorujący. Utrzymując pulę wątków, model zwiększa wydajność i pozwala uniknąć opóźnień w wykonywaniu z powodu częstego tworzenia i niszczenia wątków dla krótkotrwałych zadań. Liczba dostępnych wątków jest dostosowana do zasobów obliczeniowych dostępnych dla programu, takich jak równoległa kolejka zadań po zakończeniu wykonywania.
Wydajność
Rozmiar puli wątków to liczba wątków utrzymywanych w rezerwie do wykonywania zadań. Zwykle jest to dostrajany parametr aplikacji, dostosowywany w celu optymalizacji wydajności programu. Decydowanie o optymalnym rozmiarze puli wątków ma kluczowe znaczenie dla optymalizacji wydajności.
Jedną z zalet puli wątków w porównaniu z tworzeniem nowego wątku dla każdego zadania jest to, że narzut związany z tworzeniem i niszczeniem wątków jest ograniczony do początkowego tworzenia puli, co może skutkować lepszą wydajnością i lepszą stabilnością systemu . Tworzenie i niszczenie wątku i powiązanych z nim zasobów może być procesem kosztownym pod względem czasu. Nadmierna liczba wątków w rezerwie powoduje jednak marnowanie pamięci, a przełączanie kontekstu między uruchamialnymi wątkami powoduje obniżenie wydajności. Połączenie gniazda z innym hostem sieciowym, którego zerwanie i ponowne ustanowienie może zająć wiele cykli procesora, można skuteczniej utrzymywać, kojarząc je z wątkiem, który działa w trakcie więcej niż jednej transakcji sieciowej.
Korzystanie z puli wątków może być przydatne nawet przy odłożeniu na bok czasu uruchamiania wątku. Istnieją implementacje pul wątków, które sprawiają, że kolejkowanie pracy, kontrolowanie współbieżności i synchronizacja wątków na wyższym poziomie jest trywialne, niż można to łatwo zrobić przy ręcznym zarządzaniu wątkami. W takich przypadkach korzyści wynikające z użytkowania mogą być drugorzędne.
Zazwyczaj pula wątków jest wykonywana na jednym komputerze. Jednak pule wątków są koncepcyjnie powiązane z farmami serwerów , w których proces główny, który może być samą pulą wątków, rozdziela zadania między procesy robocze na różnych komputerach w celu zwiększenia ogólnej przepustowości. Zawstydzająco równoległe problemy są bardzo podatne na to podejście. [ potrzebne źródło ]
Liczba wątków może być dynamicznie dostosowywana w trakcie życia aplikacji na podstawie liczby oczekujących zadań. Na przykład serwer sieciowy może dodawać wątki, jeśli pojawia się wiele żądań stron internetowych , i może usuwać wątki, gdy te żądania zmniejszają się. [ sporne ] Kosztem posiadania większej puli wątków jest zwiększone zużycie zasobów. Algorytm używany do określania, kiedy tworzyć lub niszczyć wątki, wpływa na ogólną wydajność:
- Tworzenie zbyt wielu wątków marnuje zasoby i kosztuje czas tworzenie nieużywanych wątków.
- Zniszczenie zbyt wielu wątków wymaga więcej czasu później przy ponownym ich tworzeniu.
- Tworzenie wątków zbyt wolno może skutkować niską wydajnością klienta (długi czas oczekiwania).
- Niszczenie wątków zbyt wolno może pozbawić inne procesy zasobów.
Zobacz też
- Asynchronia (programowanie komputerowe)
- Wzór puli obiektów
- Wzór współbieżności
- Wysyłka Grand Central
- Rozszerzenia równoległe
- Zrównoleglenie
- Farma serwerów
- Etapowa architektura sterowana zdarzeniami
Linki zewnętrzne
- „ Zapytanie według plasterka, wykonywanie równoległe i łączenie: wzorzec puli wątków w Javie ” autorstwa Binildas CA
- „ Pule wątków i kolejki pracy ” autorstwa Briana Goetza
- „ Metoda łączenia wątków roboczych ” autorstwa Pradeepa Kumara Sahu
- „ Work Queue ” autorstwa Uri Twiga: demonstracja kodu C++ połączonych wątków wykonujących kolejkę roboczą.
- „ Pule wątków systemu Windows i łączenie łańcuchów wykonywania ”
- „ Inteligentna pula wątków ” autorstwa Ami Bar
- „ Programowanie puli wątków w środowisku .NET Framework ” autorstwa Davida Carmony
- „ Tworzenie puli wątków blokujących powiadomienia w Javie ” autorstwa Amira Kirsha
- „ Praktyczne programowanie wielowątkowe w języku Python: pule wątków i kolejki ” Noah Gift
- „ Optymalizacja strategii puli wątków dla CORBA w czasie rzeczywistym ” autorstwa Irfana Pyarali, Mariny Spivak, Douglasa C. Schmidta i Rona Cytrona
- „ Odroczone anulowanie. Wzorzec behawioralny ” Philippa Bachmanna
- „ Pula wątków C++17 do wysokowydajnych obliczeń naukowych ” autorstwa Baraka Shoshany'ego