Pula wątków

Przykładowa pula wątków (zielone pola) z zadaniami oczekującymi (niebieskie) i zakończonymi zadaniami (żółte)

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ż

Linki zewnętrzne