COROUTINE
Coroutine (співпрограми) — спосіб виконання неблокуючих асинхронних операцій у додатках на Kotlin для Android.
Асинхронне програмування з Coroutine дає змогу використовувати функції, які можна запускати, припиняти і відновлювати не блокуючи потік. Без такого підходу складно зробити гнучкий, зручний для користувача додаток, який буде просто масштабувати.
Coroutine можна створювати не тільки в Kotlin, але саме в нього є підтримка співпрограм на рівні мови з делегуванням основних функцій бібліотекам.
Kotlin рекомендує використовувати Corutines для асинхронного програмування. Існує досить нюансів архітектури, які обумовлюють застосування співпрограми. У більшості випадків асинхронні завдання просто запускаються в окремих потоках. Це більш просте стандартне рішення, ефективність якого залежить від складності вашого проєкту. Проте, якщо кожен потік і перемикання між ними вимагає серйозних витрат ресурсів, потрібно знизити кількість потоків і навантаження на систему або взагалі використовувати тільки один потік, як в JavaScript, вигідніше використовувати співпрограми. Вони так само доречні, наприклад, якщо в проєкті багато mutable state, з якими функція може повертати різні значення, за тих самих аргументів. Або якщо міняти UI можна тільки з його потоку й так далі.
Застосування Coroutines значно покращує продуктивність програми. Призупинення функцій без блокування потоку дає можливість істотно заощадити ресурси. У стандартній ситуації, коли активно всього кілька із загальної кількості потоків, блокування одного з них гальмує конкретний процес і всю роботу загалом. Призупинення співпрограми своєю чергою не вимагає витрат на переключення потоків і використання механізмів ОС.
У користувальницькій бібліотеці можна точно налаштувати умови роботи співпрограми. Розробники можуть не тільки просто додавати умови припинень, а ще оптимізувати їх, вносити в журнали й багато іншого. Водночас співпрограми вимагають жорсткої прив’язки до точок зупинки — кожній потрібна хоча б одна suspend-функція, яка пояснює, де можна безпечно зупинити обчислення, щоби їх було легко відновити під час наступного виклику.
Kotlin забезпечує простоту використання Corutines в проєктах завдяки підтримці в багатьох бібліотеках Jetpack. У деяких із них є свої області співпрограм, з якими легко створити структурований паралелізм і, крім усіх інших переваг, також скоротити кількість витоків пам’яті.
Coroutine — зручний і ефективний інструмент для бекенд-розробників, що спрощує асинхронне програмування. Він необхідний для реалізації складних високонавантажених систем. Якщо у вашому проєкті потрібно буде використовувати багато асинхронного коду, то можуть знадобитися співпрограми. У деяких випадках для виконання тих же завдань під андроїд, може використовуватися RX java, як RX Swift для iOS, або інші способи розв’язання проблеми.
У простих і навіть середніх проєктах Coroutine найчастіше не потрібні через свою складність і вузьку спеціалізованість. Але є досить складних завдань, які ефективніше вирішувати через співпрограми. Чи потрібні вони саме вашому проєкту, стане зрозуміло на етапі обговорення і створення технічного завдання на розробку.