Size: a a a

Kotlin Community

2020 July 13

AH

Ayrat Hudaygulov in Kotlin Community
Ruslan Ibragimov
Ну да, а что делать

Еще кстати можно проперти сделать, не все знают:

val <T> T?.unit: Unit
   get() = Unit
прикольно.
источник

RI

Ruslan Ibragimov in Kotlin Community
Но вообще заглушка полезная, можно попробовать в stdlib пропихнуть
источник

V

Vladimir in Kotlin Community
Правильно ли я понимаю, что корутина, созданная посредством вызова CoroutineScope().actor, работает немного иначе, чем те, что создаются через launch и async? Что позволяет не беспокоиться о том, что приостановленная функция в акторе не возобновится в каком-то другом потоке?
источник

AN

Alexander Nozik in Kotlin Community
Vladimir
Правильно ли я понимаю, что корутина, созданная посредством вызова CoroutineScope().actor, работает немного иначе, чем те, что создаются через launch и async? Что позволяет не беспокоиться о том, что приостановленная функция в акторе не возобновится в каком-то другом потоке?
За потоки отвечает диспатчер. Если у вас диспатчер однопоточный, то вы можете гарантировать, что все всегда в одном потоке
источник

RI

Ruslan Ibragimov in Kotlin Community
И того же поведения можно добиться с помощью launch/async, указав диспетчер созданный из однопоточного экзекьютора
источник

RI

Ruslan Ibragimov in Kotlin Community
Разница в том что actor последовательно обрабатывает сообщения из собственного канала, launch - это асинхронная работа, а async - асинхронная работа которая возвращает результат.
Аффинити к треду у них всех регулируется через context
источник

V

Vladimir in Kotlin Community
Ruslan Ibragimov
И того же поведения можно добиться с помощью launch/async, указав диспетчер созданный из однопоточного экзекьютора
То, что можно указать однопоточный диспатчер для корутины  - это я понимаю. Вопрос именно в том как это в акторах работает. В акторе рекомендуется хранить мутабельное состояние. Если верить вышесказанному, то указав для актора например Dispatchers.Default я могу столкнуться с тем, что у меня несколько потоков в акторе будет бегать и трогать мое мутабельное состояние, потому что перебор сообщений в акторе - это suspend
источник

RI

Ruslan Ibragimov in Kotlin Community
Vladimir
То, что можно указать однопоточный диспатчер для корутины  - это я понимаю. Вопрос именно в том как это в акторах работает. В акторе рекомендуется хранить мутабельное состояние. Если верить вышесказанному, то указав для актора например Dispatchers.Default я могу столкнуться с тем, что у меня несколько потоков в акторе будет бегать и трогать мое мутабельное состояние, потому что перебор сообщений в акторе - это suspend
CPU -> Core -> Thread -> Coroutine
источник

RI

Ruslan Ibragimov in Kotlin Community
Корутины запускаются на треде, а не треды на корутинах
источник

RI

Ruslan Ibragimov in Kotlin Community
Dispatchers.Default лишь говорит что в определенный момент времени корутина будет запускаться на одном из потоков в этом диспетчере
источник

AN

Alexander Nozik in Kotlin Community
Ruslan Ibragimov
Корутины запускаются на треде, а не треды на корутинах
Треды и корутины вообще ортогональны.
источник

V

Vladimir in Kotlin Community
Ruslan Ibragimov
Корутины запускаются на треде, а не треды на корутинах
почему-то я думал, что корутина - это отдельная вещь, которая может обращаться к пулу потоков, который задается с помощью диспетчера
источник

AM

Andrew Mikhaylov in Kotlin Community
Vladimir
почему-то я думал, что корутина - это отдельная вещь, которая может обращаться к пулу потоков, который задается с помощью диспетчера
Ну как сказать, сама корутина никуда не обращается. За планирование выполнения корутин диспетчер отвечает, да. В теории диспетчер может делать что угодно, от setTimeout в джиэсе до сериализации состояния корутины и отправки задачи выполнить её по сети на другую машину.
источник

AL

Anton Lakotka in Kotlin Community
> до сериализации состояния корутины и отправки задачи выполнить её по сети на другую машину.
а вот тут мне интересно, есть ли уже какие-то решения? ибо я очень хотел это заиметь 🙂
источник

AL

Anton Lakotka in Kotlin Community
я помню была ишью на гитхабе, но там вроде как только обещания были
источник

AM

Andrew Mikhaylov in Kotlin Community
Anton Lakotka
> до сериализации состояния корутины и отправки задачи выполнить её по сети на другую машину.
а вот тут мне интересно, есть ли уже какие-то решения? ибо я очень хотел это заиметь 🙂
Я не видел, просто теоретизирую)
источник

AL

Anton Lakotka in Kotlin Community
блин, наверное придется самому эксперементировать.
источник

AL

Anton Lakotka in Kotlin Community
там вроде была проблема в том как сериализовать Continuation
источник

AM

Andrew Mikhaylov in Kotlin Community
Можно попробовать Романа тегнуть, если кто-то этим и занимается, публично об этом заявив, он, скорее всего, об этом знает 🤷‍♂
источник

BP

Bogdan Panchenko in Kotlin Community
Anton Lakotka
там вроде была проблема в том как сериализовать Continuation
Тебе нужно серелизраать все объекты которые в нем находятся, а как это сделать - очень сложная задача
источник