[Async/await] Как работает Swift Coroutine Model

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Всем привет, на связи Никита и Технократия! В прошлой статье мы уже обсудили проблемы текущего состояния concurrency в Swift. Давайте двигаться дальше и сегодня мы начнем свое знакомство с необходимой базой для async/await в Swift 5.5

Для начала обратимся к Proposal SE-0296, в котором рассказывают базовые аспекты нового подхода.

Сфокусируемся на одном из первых предложений: «This design introduces a coroutine model to Swift» и заметим новое для большинства iOS-разработчиков словосочетание coroutine model.

Что же это такое? Давайте разбираться.

Терминология

Прежде чем изучать новую модель, давайте сравним пары базовых и очень похожих друг на друга терминов в сфере асинхронного программирования, которые будут упоминаться в будущем: 

Multitasking и Multithreading

Multitasking -  это возможность программы работать над разным задачами, task-ами, в одну единицу времени.

В рамках операционной системы можно провести аналогию с разными запущенными приложениями на вашем девайсе.

Если рассматривать с точки зрения одного конкретного приложения, то это выполнение программой задач, созданных разработчиками в коде.

На картинке приведен пример с операционной системой, на которой запущены сразу три программы - Pages, Safari, Xcode. Мы можем сказать, что у операционной системы есть 3 задачи, которые она выполняет, что делает ее многозадачной.

Помимо это многозадачность бывает двух видов: preemptive и cooperative.

1. Preemptive - система может остановить выполнение текущего процесса и отдать выполнение другому процессу, в таких случаях происходит вытеснение (preempting). 

Пример: Threads, а именно context switch, когда меняется поток, задача приостанавливает свое выполнение в месте, неизвестном для для нас заранее. Проиллюстрируем этот пример. В нашей визуальной интерпретации процессор (система) сам меняет потоки со своими стеками:

2. Cooperative - система останавливает выполнение текущего процесса в заранее известных местах, когда процесс (задача) может «добровольно» отдать управление. 

Пример: Новая поточка (coroutine)

Источник: https://habr.com/ru/post/671304/


Интересные статьи

Интересные статьи

8 января 2022 года на Хабре вышла статья Александра Клименкова о том, почему мозговой штурм не работает. Это не первая статья такого рода, которая мне попадается, за пределами Хабра особенно интересно...
Публикация, в которой идет речь о SwiftUI. Расчитана в первую очередь на разработчиков, которые только столкнулись со SwiftUI.Ничего фантастического в публикации нет, примеры некоторых моментов, котор...
Все «за» и «против» 1С-Битрикс, какие есть альтернативы и что выгоднее знать разработчику? Читать далее
Ранее в одном из наших КП добавление задач обрабатывалось бизнес-процессами, сейчас задач стало столько, что бизнес-процессы стали неуместны, и понадобился инструмент для массовой заливки задач на КП.
Эта статья посвящена одному из способов сделать в 1с-Битрикс форму в всплывающем окне. Достоинства метода: - можно использовать любые формы 1с-Битрикс, которые выводятся компонентом. Например, добавле...