Size: a a a

Kotlin Community

2020 November 09

АО

Алексей Овсянников... in Kotlin Community
ещё есть пара проблем: это JVM ограничения (заблокировали поток - получили копец на корутине), то есть с некоторыми подходами/библиотеками корутины просто несовместимы
источник

АО

Алексей Овсянников... in Kotlin Community
в остальном корутины сильно лучше каких-нибудь тредов
источник

AE

Alexandr Emelyanov in Kotlin Community
Алексей Овсянников
в остальном корутины сильно лучше каких-нибудь тредов
ну в случае чистых вычислений таки треды будут лучше
источник

с#

саша сок #KotlinGang... in Kotlin Community
Alexandr Emelyanov
ну в случае чистых вычислений таки треды будут лучше
io диспетчер выполняет корутины на тредах
источник

KG

Kirill Gamazkov in Kotlin Community
Alexander Nozik
Только за счет тулинга
Хм, и правда.
Ну тогда да, когда появится другая реализация зелёных тредов со structured concurrency, и не требующая аж поддержки компилятора - да, в топку. А пока я не знаю альтернативы корутинам в этом плане
источник

AN

Alexander Nozik in Kotlin Community
Alexandr Emelyanov
ну в случае чистых вычислений таки треды будут лучше
На самом деле без разницы. Оверхед на корутину очень маленький. Она под капотом тот же тред займет. Я мерил
источник

AN

Alexander Nozik in Kotlin Community
саша сок #KotlinGang
io диспетчер выполняет корутины на тредах
+
источник

с#

саша сок #KotlinGang... in Kotlin Community
Alexandr Emelyanov
ну в случае чистых вычислений таки треды будут лучше
треды будут эффективные только потому что вычисления блокирующие
источник

AN

Alexander Nozik in Kotlin Community
саша сок #KotlinGang
треды будут эффективные только потому что вычисления блокирующие
даже в этом случае без разницы, если это IO
источник

с#

саша сок #KotlinGang... in Kotlin Community
да, я как раз про это, потому что там даже если корутина заблокировалась, то там мультипоток
источник

AE

Alexandr Emelyanov in Kotlin Community
Alexander Nozik
На самом деле без разницы. Оверхед на корутину очень маленький. Она под капотом тот же тред займет. Я мерил
да, маленький. только пул потоков надо выделить по-больше, а не по конкурентности цп
источник

АО

Алексей Овсянников... in Kotlin Community
Alexandr Emelyanov
ну в случае чистых вычислений таки треды будут лучше
Не всегда, если вычисления маленькие - да, если большие - разница будет не такая большая
источник

KG

Kirill Gamazkov in Kotlin Community
саша сок #KotlinGang
да, я как раз про это, потому что там даже если корутина заблокировалась, то там мультипоток
Ничего не понял, но очень интересно (правда интересно). Что вы имеет в виду под "мультипоток"?
источник

AE

Alexandr Emelyanov in Kotlin Community
саша сок #KotlinGang
треды будут эффективные только потому что вычисления блокирующие
вычисления ничего не блокируют, они просто занимают ресурс процессора. проблема блокировок именно в том, что при блокировках рессурс процессора простаивает
источник

АО

Алексей Овсянников... in Kotlin Community
Alexandr Emelyanov
ну в случае чистых вычислений таки треды будут лучше
Без suspend точек производительность корутины == производительности треда, на которой она работает. Там затраты будут не первое и последнее переключение контекстов (если они есть) + внутренние операции по передачи значений на выход
источник

AE

Alexandr Emelyanov in Kotlin Community
Алексей Овсянников
Не всегда, если вычисления маленькие - да, если большие - разница будет не такая большая
да
источник

с#

саша сок #KotlinGang... in Kotlin Community
Kirill Gamazkov
Ничего не понял, но очень интересно (правда интересно). Что вы имеет в виду под "мультипоток"?
проблема блокирующих операций в том, что корутина дальше не пойдет, пока операция не выполнится. поэтому либо делить операцию на сиквенсы делать суспенд функции, чем занимаются библиотеки (в случае с интернет-запросами), либо выполнять в IO, который корутины не в одном потоке выполняет
источник

AN

Alexander Nozik in Kotlin Community
Короче, резюмирую. Аппарат корутин можно использовать для управления потоками, не используя CPS и это тоже удобно. Но в случае с тяжелыми блокирующими операциями, разницы по сравнению с прямым использованием потоков не будет
источник

KG

Kirill Gamazkov in Kotlin Community
Alexandr Emelyanov
да, маленький. только пул потоков надо выделить по-больше, а не по конкурентности цп
Сильно больше цп не надо по идее. Там же фишка в work stealing, так? Т. е. даже если будет много IO, то достаточно нескольких тредов в отдельном диспетчере, чтобы дожидались завершения IO, а для вычислительной части 2 х кол-во ядер потоков в пуле достаточно должно быть
источник

АО

Алексей Овсянников... in Kotlin Community
Kirill Gamazkov
Сильно больше цп не надо по идее. Там же фишка в work stealing, так? Т. е. даже если будет много IO, то достаточно нескольких тредов в отдельном диспетчере, чтобы дожидались завершения IO, а для вычислительной части 2 х кол-во ядер потоков в пуле достаточно должно быть
нет, так уж исторически сложилось,Ю что чтобы дождаться ответа из сокета/от системы/etc., нужно залочить поток до получения собственно ответа
источник