Coroutine

Coroutine (корутины), или сопрограммы — это блоки кода, которые работают асинхронно, то есть по очереди. В нужный момент исполнение такого блока приостанавливается с сохранением всех его свойств, чтобы запустился другой код. Когда управление возвращается к первому блоку, он продолжает работу. В результате программа выполняет несколько функций одновременно.

Для чего нужны корутины

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

Корутины поддерживают Kotlin, JavaScript, PHP, C#, Go, Python, Ruby, Lua и другие языки программирования. 

Начните свой путь в IT

Попробуйте себя в программировании, аналитике данных, Data Science и других востребованных специальностях — получите все курсы для входа в IT по цене одного.

Узнать подробности

Как работают сопрограммы

Сопрограммы — это потоки исполнения кода, которые организуются поверх системных потоков. Поток исполнения кода — это последовательность операций, выполняющихся друг за другом. Она исполняется, пока не наступит момент, который задан в коде или определен разработчиком. Затем может начать выполняться часть другой последовательности операций. В системных потоках содержатся инструкции процессора, на одном его ядре могут по очереди работать разные системные потоки. Корутины работают на более высоком уровне: несколько сопрограмм могут поочередно выполнять свой код на одном системном потоке.

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

Принципы работы корутин:

  • Могут иметь несколько точек для входа и возврата.
  • Приостанавливаются и возобновляют работу больше одного раза.
  • Действуют по стратегии LIFO — последняя вызванная корутина закончится первой.
Принцип работы корутин

Различия между корутинами и потоками

Многозадачность с использованием корутин легко перепутать с многопоточностью. Это выполнение программы в нескольких системных потоках.

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

  • Потоками управляет операционная система. Переключением корутин — разработчик с помощью кода.
  • Переключение потоков сложно контролировать. Корутины контролируются более гибко.
  • Потоки отнимают много ресурсов процессора — ему постоянно приходится переключаться между ними. Корутины не требуют переключения контекста, поэтому код потребляет мало ресурсов.
  • Потоки выполняются на аппаратном или системном уровне. Корутины — более высокоуровневое решение. Это значит, что они дальше от системы и аппаратных ресурсов, зато ближе к человеческим понятиям.
  • Потоки ускоряют выполнение сложной задачи, но отнимают много ресурсов. Корутины не повышают скорость, но помогают оптимизировать нагрузку.
  • Корутины выполняются в рамках одного потока или пула потоков.
Различия между корутинами и потоками

Преимущества использования корутин

Эффективность

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

Удобство для пользователя

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

Снижение нагрузки на систему

Асинхронность позволяет выполнять несколько действий в рамках одного потока вместо того, чтобы множить потоки. Системе проще выполнить один поток, чем несколько. Разработчики из JetBrains прояснили это на таком примере: запустить 10 тысяч корутин одновременно — задача, с которой устройство справится. А 10 тысяч потоков — невозможное явление: компьютеру не хватит памяти.

Гибкость в управлении

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

Недостатки сопрограмм

Сложность и высокий порог вхождения

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

Узкая специализация

Корутины — высокоуровневое решение. Ускорить сложные вычисления с помощью сопрограмм не получится. В этом случае нужна многопоточность, а не асинхронность. При этом корутины подходят для снижения нагрузки на систему.

Отсутствие в ряде языков

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

Профессия

Android-разработчик

Вы начнете с основ программирования, изучите Java, Kotlin, Android Studio, Git, UX/UI и PlayMarket.

  • 20% теории, 80% практики;
  • 10 проектов в портфолио;
  • помощь в трудоустройстве.

Узнать больше

 

Другие термины на букву «C»

Chrome DevTools
Computer Science
CSP
CSRF
CSS
CTE
CustDev

Все термины

Курсы по теме

(рейтинг: 5, голосов: 4)
Добавить комментарий