Size: a a a

Kotlin Community

2020 May 12

IO

Iaroslav Orlov in Kotlin Community
Alexander Nozik
Просто нет способов прервать выполнение в произвольной точке безопасным образом.
как добавить точки прерывания не в свой код?
источник

VP

Vladimir Petrakovich in Kotlin Community
Iaroslav Orlov
как добавить точки прерывания не в свой код?
Никак, на то он и не свой, ему виднее, где он готов к прерыванию
источник

AN

Alexander Nozik in Kotlin Community
Iaroslav Orlov
как добавить точки прерывания не в свой код?
Если это корутина, то проверка на isActive или просто yeild
источник

AN

Alexander Nozik in Kotlin Community
а, сори, пропустил слово НЕ
источник

AN

Alexander Nozik in Kotlin Community
Ну да, никак. Если это блокирующий код, то или у него должен быть хэндлер, который отбрабатывает отмену, или никак.
источник

IO

Iaroslav Orlov in Kotlin Community
а даёт ли оно оверхед?
источник

IO

Iaroslav Orlov in Kotlin Community
если, например, в цикле на 1000000 итераций каждый раз проверять, прерван ли поток
источник

AN

Alexander Nozik in Kotlin Community
Iaroslav Orlov
если, например, в цикле на 1000000 итераций каждый раз проверять, прерван ли поток
вы можете проверять из не на каждый виток цикла, а на каждый 10000-ный
источник

AN

Alexander Nozik in Kotlin Community
if(n % 10000 ==0) yield()
источник

IO

Iaroslav Orlov in Kotlin Community
понятно
источник

AN

Alexander Nozik in Kotlin Community
если это проверка флага, она должна быть почти бесплатной
источник

IO

Iaroslav Orlov in Kotlin Community
понял
источник

IO

Iaroslav Orlov in Kotlin Community
а насколько оправдано использование корутин вместо потоков в параллельных вычислениях? т.е. можно ли заменить форк 4 тредов на корутины и получить такой же перфоманс?
источник

VP

Vladimir Petrakovich in Kotlin Community
Iaroslav Orlov
а насколько оправдано использование корутин вместо потоков в параллельных вычислениях? т.е. можно ли заменить форк 4 тредов на корутины и получить такой же перфоманс?
Если хочется нормальную отмену, то вполне оправдано
источник

IO

Iaroslav Orlov in Kotlin Community
можно ли быть уверенным, что диспетчер зафоркает нужное количество потоков, а не запихнет всё в один?
источник

AN

Alexander Nozik in Kotlin Community
Iaroslav Orlov
а насколько оправдано использование корутин вместо потоков в параллельных вычислениях? т.е. можно ли заменить форк 4 тредов на корутины и получить такой же перфоманс?
потоки, просто они не явно используются
источник

IO

Iaroslav Orlov in Kotlin Community
это-то понятно
источник

AN

Alexander Nozik in Kotlin Community
Iaroslav Orlov
можно ли быть уверенным, что диспетчер зафоркает нужное количество потоков, а не запихнет всё в один?
Если диспетчер правильный.
источник

AN

Alexander Nozik in Kotlin Community
При запуске корутины указываете явно диспатчер и тогда гарантия есть
источник

VP

Vladimir Petrakovich in Kotlin Community
Iaroslav Orlov
можно ли быть уверенным, что диспетчер зафоркает нужное количество потоков, а не запихнет всё в один?
Dispatchers.Default - подходящий пул для вычислительных задач.
Но если они жирные, можно подкосить отзывчивость приложения, поэтому в таком случае есть смысл создать свой пул и на нём гонять этот код.
источник