🔈 Во вторник прочитал доклад на
Podlodka iOS Crew.
Доклад
технический, про устройство потоков на уровне приложения и ядра ОС. При подготовке ставил целью покопаться во внутренностях, понять лучше, что происходит под капотом. Приятный челлендж.
Выделю несколько тезисов про многозадачность (хотя доклад шире: любопытствующие - посмотрите слайды)
✍️ Есть два алгоритма переключения между задачами потоков (многозадачности) на уровне операционной системы: кооперативный (задача сама решает, когда уступить процессорное время другим задачам) и принудительный (операционная система контролирует переключение между задачами).
✍️ В iOS используется принудительная многозадачность, которая контролируется операционной системой на уровне ядра XNU.
✍️ Для управления переключением в принудительной многозадачности в ОС существует планировщик. Он записывает статистику использования CPU на поток и вычисляет и изменяет относительные приоритеты выполнения.
✍️ Swift Concurrency, используя async-await и Task, применяет элементы кооперативной многозадачности на уровне языка. Получается гибридная модель: есть легкие «потокоподобные» Tasks, о которых ядро ничего не знает, и Concurrency решает, какие из них будут выполняться на небольшом числе «реальных» потоков, поддерживаемых ядром. На уровне ядра продолжает работать принудительная многозадачность.
P.S. Обещал выложить в канал список литературы из доклада
•
Concurrency & Multithreading in iOS•
Concurrency and Parallelism: Understanding I/O•
The Little Book of Semaphores by Allen B. Downey•
Apple’s Open Source Roots: The BSD Heritage Behind macOS and iOS•
macOS Kernel & System Extensions•
Kernel Architecture Overview•
GCD Internals•
Threading Programming Guide•
What’s the difference between a Thread and a Task?•
Закон Амдала