Jak realizowana jest wielowątkowość na urządzeniu z jednym rdzeniem?
sobes.tech AI
Odpowiedź od AI
Na urządzeniu z jednym rdzeniem wielowątkowość jest emulowana przez system operacyjny za pomocą mechanizmu kwantowania czasu i przełączania kontekstu.
- Kwant czasu: Każdemu wątkowi przypisuje się niewielki fragment czasu procesora.
- Wielozadaniowość preemptive: System operacyjny przerywa wykonywanie wątku po upływie jego kwantu czasu lub podczas oczekiwania na zasoby (np. wejście/wyjście).
- Przełączanie kontekstu: Stan bieżącego wątku (rejestry procesora, wskaźnik instrukcji, stan pamięci) jest zapisywany, a stan następnego wątku ładowany.
- Iluzja równoległości: Dzięki szybkim przełączaniom między wątkami tworzy się wrażenie, że są one wykonywane równolegle, choć w danym momencie na rdzeniu pracuje tylko jeden wątek.
iOS korzysta z frameworków takich jak GCD (Grand Central Dispatch) i Kolejki Operacji, które abstrakcyjnie przedstawiają te mechanizmy niskiego poziomu, upraszczając zarządzanie wielowątkowością dla programisty. GCD używa pul wątków i automatycznie zarządza ich cyklem życia i planowaniem na dostępnych rdzeniach procesora (nawet na jednym).
Na przykład, korzystając z GCD:
import Foundation
// Tworzenie zadania asynchronicznego
DispatchQueue.global(qos: .userInitiated).async {
// Kod, który będzie wykonywany w tle
// Na urządzeniu z jednym rdzeniem, ten kod będzie przeplatał się
// z wykonywaniem kodu w innych wątkach/głównym wątku
print("Wykonywane w tle")
}
// Główny wątek kontynuuje wykonywanie
print("Wykonywane w głównym wątku")
Nawet na urządzeniu z jednym rdzeniem, GCD umieści to zadanie w kolejce i przydzieli mu kwant czasu do wykonania, przełączając się między nim a głównym wątkiem (i innymi wątkami, jeśli istnieją), tworząc iluzję równoległości.