MILTITHREAD
Wielowątkowość (Multithreading)
Wielowątkowość to technika programistyczna polegająca na
równoległym wykonywaniu wielu zadań (wątków)
w obrębie jednego procesu.
Celem wielowątkowości jest zwiększenie wydajności,
responsywności oraz lepsze wykorzystanie zasobów sprzętowych.
PODSTAWY
Czym jest wątek?
Wątek (thread) to najmniejsza jednostka wykonawcza programu.
Wątki działają w obrębie jednego procesu i współdzielą:
- pamięć
- zmienne globalne
- zasoby systemowe
Każdy wątek posiada natomiast własny stos wywołań
oraz licznik instrukcji.
DLACZEGO?
Po co stosuje się wielowątkowość?
- obsługa wielu użytkowników jednocześnie
- równoległe operacje wejścia/wyjścia
- responsywne interfejsy użytkownika
- przyspieszenie obliczeń
Bez wielowątkowości wiele aplikacji byłoby wolnych
lub całkowicie nieużywalnych.
MODEL
Proces vs wątek
- Proces – niezależna instancja programu
- Wątek – część procesu, współdzieląca pamięć
Wątki są lżejsze od procesów i szybsze w tworzeniu,
ale wymagają ostrożnego zarządzania współdzielonymi danymi.
PROBLEMY
Problemy wielowątkowości
- race conditions (warunki wyścigu)
- deadlock (zakleszczenie)
- starvation
- trudniejsze debugowanie
Błędy wielowątkowe są często trudne do odtworzenia
i mogą pojawiać się losowo.
SYNCHRONIZACJA
Synchronizacja wątków
Aby uniknąć konfliktów, stosuje się mechanizmy synchronizacji:
- mutexy
- semafory
- locki
- sekcje krytyczne
lock(mutex) {
sharedCounter++;
}
PRZYKŁAD
Przykład wielowątkowości (Java)
class Worker extends Thread {
public void run() {
System.out.println("Wątek działa");
}
}
public class Main {
public static void main(String[] args) {
Worker w1 = new Worker();
Worker w2 = new Worker();
w1.start();
w2.start();
}
}
JĘZYKI
Wielowątkowość w różnych językach
- Java – Thread, ExecutorService
- C / C++ – pthreads
- Python – threading, multiprocessing
- JavaScript – Web Workers
- Go – goroutines
NOWOCZESNE PODEJŚCIE
Współczesne podejścia
- thread pools
- model aktorów
- programowanie reaktywne
- asynchroniczność zamiast wątków
Coraz częściej stosuje się modele abstrakcyjne,
które ukrywają bezpośrednie zarządzanie wątkami.
PODSUMOWANIE
Podsumowanie
Wielowątkowość to potężne narzędzie,
które pozwala tworzyć wydajne i skalowalne aplikacje.
Jednocześnie wymaga dużej ostrożności,
dobrej architektury oraz testowania.
1