Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zalecaną wskazówką jest użycie jak najmniejszej liczby wątków, co pozwala zminimalizować wykorzystanie zasobów systemowych. Poprawia to wydajność. Wielozadaniowość ma wymagania dotyczące zasobów i potencjalne konflikty, które należy wziąć pod uwagę podczas projektowania aplikacji. Wymagania dotyczące zasobów są następujące:
- System zużywa pamięć dla informacji kontekstowych wymaganych przez procesy i wątki. W związku z tym liczba procesów i wątków, które można utworzyć, jest ograniczona przez dostępną pamięć.
- Śledzenie dużej liczby wątków zużywa znaczną ilość czasu procesora. Jeśli istnieje zbyt wiele wątków, większość z nich nie będzie w stanie poczynić znaczących postępów. Jeśli większość bieżących wątków znajduje się w jednym procesie, wątki w innych procesach są planowane rzadziej.
Zapewnienie dostępu współdzielonego do zasobów może powodować konflikty. Aby ich uniknąć, należy zsynchronizować dostęp do zasobów udostępnionych. Dotyczy to zasobów systemowych (takich jak porty komunikacyjne), zasobów współużytkowanych przez wiele procesów (takich jak dojścia plików) lub zasobów pojedynczego procesu (na przykład zmiennych globalnych) dostępnych przez wiele wątków. Brak poprawnego synchronizowania dostępu (w tym samym lub w różnych procesach) może prowadzić do problemów, takich jak zakleszczenie i warunki wyścigu. Obiekty synchronizacji i funkcje, których można użyć do koordynowania udostępniania zasobów między wieloma wątkami. Aby uzyskać więcej informacji na temat synchronizacji, zobacz Synchronizowanie wykonywania wielu wątków. Zmniejszenie liczby wątków ułatwia i bardziej efektywne synchronizowanie zasobów.
Dobrym projektem dla aplikacji wielowątkowej jest serwer działający w formie potokowej. W tym projekcie utworzysz jeden wątek na procesor i utworzysz kolejki żądań, dla których aplikacja przechowuje informacje kontekstowe. Wątek przetwarza wszystkie żądania w jednej kolejce, zanim przystąpi do przetwarzania żądań w następnej kolejce.