Когда вы начинаете изучать Kotlin сопрограмм, одним из первых примеров, которые вы видите, является то, что можно запустить сотни тысяч сопрограмм, но столкнуться с исключениями OutOfMemory при попытке сделать то же самое с потоками.
Хотя этот пример «крутой», я не думаю, что он полезен и даже немного вводит в заблуждение для разработки Android приложений в реальном мире. Конечно, вы можете запустить сотни тысяч сопрограмм, которые ничего не делают, кроме delay()
, но на самом деле вы либо запускаете сопрограммы, которые выполняют какие-то операции ввода-вывода, либо какие-то вычисления.
Если вы, например, запускаете сотни тысяч сопрограмм, и каждая из них выполняет сетевой запрос с помощью Retrofit, это будет не более легким, чем использование Retrofit традиционно без Coroutines, потому что okhttp все еще блокирует поток для каждого запрос.
То же самое верно, когда вы выполняете вычисления в сопрограммах. Тогда он также не будет более легким, поскольку потоки, выполняющие вычисления, блокируются до тех пор, пока они не закончатся.
Верно ли мое предположение, что без наличия неблокирующих библиотек ввода-вывода мое приложение не станет более эффективным или «легким» просто с помощью сопрограмм, или я чего-то упускаю?