Очень обсуждаемый вопрос. Мой ответ основан на моем собственном опыте и нескольких веб-ссылках на известные ссылки.
Если вы пишете на Kotlin, я бы всегда использовал сопрограммы.
1. Производительность
baeldung.com
Создание слишком большого количества потоков может фактически привести к снижению производительности приложения в некоторых ситуациях;потоки - это объекты, которые накладывают накладные расходы во время размещения объектов и сборки мусора.
Чтобы преодолеть эти проблемы, Котлин представил новый способ написания асинхронного неблокирующего кода;сопрограмма.
Подобно потокам, сопрограммы могут работать одновременно, ожидать и общаться друг с другом, с той разницей, что их создание намного дешевле, чем потоки.
Естьмногие другие веб-сайты и статистические данные подтверждают, что сопрограммы намного дешевле, чем использование потоков Java.
Исходя из собственного опыта, я создаю приложение в своей компании для логистики, которое в какой-то момент времени выполнения имеет более 20 сопрограмм. работает параллельно - за 1,5 года у меня никогда не было проблем с «OutOMemory», «StackOverflow» или «замедлением работы основного приложения».
2. Удобство использования / сложность
По сравнению с потоками Java, использование сопрограмм Kotlin очень просто и не заставляет вас менять код. Последний пункт хорошо объяснен в этом видео.
Обычно работая в Java с потоками Java, люди создавали так много «процедур» или классов, чтобы повысить безопасность при многопоточности, что создаетогромные накладные расходы, о которых нужно знать, прежде чем делать действительно хорошую многопоточность. И это занимает много времени.
В Kotlin все просто: вам не нужны пулы потоков или твикинг кода, чтобы сделать его асинхронным - вы просто делаете это с помощью простого ключевого слова async
.