Sobes.tech
Middle

Как се реализира многозадачността на устройство с едно ядро?

sobes.tech AI

Отговор от AI

На устройство с едно ядро многопоточността се емулира от операционната система чрез механизма на квантоване на времето и превключване на контекста.

  • Квант на времето: На всеки поток се отделя малък интервал от процесорно време.
  • Предварително прекъсваща многозадачност: Операционната система прекъсва изпълнението на поток след изтичане на неговия квант или при очакване на ресурси (например вход/изход).
  • Превключване на контекста: Състоянието на текущия поток (регистри на процесора, указател на инструкции, състояние на паметта) се запазва, а състоянието на следващия поток се зарежда.
  • Илюзия за паралелност: Благодарение на бързото превключване между потокове се създава впечатление, че те се изпълняват паралелно, въпреки че в даден момент на ядрото работи само един поток.

iOS използва рамки като GCD (Grand Central Dispatch) и Operation Queues, които абстрахират тези нискоуровневи механизми, опростявайки управлението на многопоточността за разработчика. GCD използва пулове от нишки и автоматично управлява техния жизнен цикъл и планиране на наличните процесорни ядра (дори и на едно).

Например, с използване на GCD:

import Foundation

// Създаване на асинхронна задача
DispatchQueue.global(qos: .userInitiated).async {
    // Код, който ще се изпълни във фонов поток
    // На едноядрено устройство този код ще се преплита
    // с изпълнението на други потоци/главния поток
    print("Изпълнява се във фонов поток")
}

// Основният поток продължава изпълнението си
print("Изпълнява се в главния поток")

Дори на едноядрено устройство, GCD ще постави тази задача в опашка и ще й присвои квантове време за изпълнение, превключвайки между нея и главния поток (и други потоци, ако има) за създаване на илюзията за паралелност.