Мы начинаем погружаться в мир Structured Concurrency.

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

<aside> ❓ Для чего нужны ядра?

Для того чтобы ускорить выполнение задач. То есть мы понимаем, что если в телефоне 8 ядер - то система одновременно может выполнить 8 задач.

</aside>

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

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

Основными понятиями в Structured Concurrency - являются задачи и исполнители.

Задачи. Task

Исполнители. Actors

Задачи должны всегда иметь исполнителя. Он определяется почти всегда самостоятельно системой в зависимости он того какой код вы написали. Также хочется отметить, что мы можем написать своего исполнителя - Custom Executor - (но это очень сложная задача, которую необходимо внимательно и детально прорабатывать). Существует несколько типов исполнителей:

  1. Main Actor - у этого исполнителя все задачи имеют самый высокий приоритет. Он ОДИН на всё наше приложение. Он отвечает за отрисовку всего нашего интерфейса, за анимации, за переходы между экранами. Поэтому на нём крайне желательно выполнять ТОЛЬКО работу связанную с интерфейсом, если данный исполнитель начнёт выполнять тяжелую работу - то наше приложение будет фризиться. Поэтому такие задачи нужно отдавать на Global Actor
  2. Global Actor - сущность, которая имеет внутри себя несколько исполнителей:

У каждого исполнителя есть определённые инструкции, с помощью которых он работает.

Такие инструкции называются контекстом исполнителя

Контекст исполнителя