Сразу две статьи из серии, в которой планируется рассказать об уроках, вынесенных из разработки cooperative multitasking библиотеки поверх Kotlin coroutines. Всё это слабо затрагивает Android-разработку, но любителям Kotlin и корутин должно зайти.
В первой статье речь в основном пойдёт о разнице между вертикальной и горизонтальной обработкой.
Во второй же статье - про оптимизацию suspending functions на примере реализации очереди.
#kotlin #coroutine
https://blog.pronghorn.tech/cooperative-multitasking-with-kotlin-coroutines/
http://blog.pronghorn.tech/optimizing-suspending-functions-in-kotlin/
В первой статье речь в основном пойдёт о разнице между вертикальной и горизонтальной обработкой.
Во второй же статье - про оптимизацию suspending functions на примере реализации очереди.
#kotlin #coroutine
https://blog.pronghorn.tech/cooperative-multitasking-with-kotlin-coroutines/
http://blog.pronghorn.tech/optimizing-suspending-functions-in-kotlin/
@duglasher в очередной раз нам с вами кое-чего подкинул. На этот раз доклад Владимира Иванова про миграцию с RxJava на Kotlin Coroutines. Доклад на примере простого Github клиента показывает следующее:
* Проблемы RxJava
- Создаётся много overhead
- Сложный stacktrace, который ещё и не указывает на то, откуда всё изначально вызывалось
- Необходимость обучать новых разрабов, которые с RxJava не работали
* По Kotlin Coroutines:
- Легче читать, т.к. код асинхронный, но пишется как синхронный
- Обработка ошибок средствами языка
- Stacktrace всё ещё не очень, хоть и не такой длинный
Теперь немного про остальное в докладе:
* Deferred - оно как Future, только другое:
- Non-blocking
- cancellable
* Что есть suspension?
- Если обычно при вызове блокирующего метода текущий поток останавливается, то при вызове suspending function поток продолжает выполняться, а корутина уходит на выполнение к своему context.
- То есть suspension означает, что мы не блокируем, а только приостанавливаем поток, что в свою очередь означает возможность продолжить выполнение с того же места, но накладывает ограничение - suspension может случиться только в определённых местах (там, где можно вызвать fun с suspend модификатором)
* Показано, как мигрировать тесты
* И немного про работу с Kotlin Channels
#talk #rxjava #kotlin #coroutine
https://youtu.be/dQSLfj8EoVU
* Проблемы RxJava
- Создаётся много overhead
- Сложный stacktrace, который ещё и не указывает на то, откуда всё изначально вызывалось
- Необходимость обучать новых разрабов, которые с RxJava не работали
* По Kotlin Coroutines:
- Легче читать, т.к. код асинхронный, но пишется как синхронный
- Обработка ошибок средствами языка
- Stacktrace всё ещё не очень, хоть и не такой длинный
Теперь немного про остальное в докладе:
* Deferred - оно как Future, только другое:
- Non-blocking
- cancellable
* Что есть suspension?
- Если обычно при вызове блокирующего метода текущий поток останавливается, то при вызове suspending function поток продолжает выполняться, а корутина уходит на выполнение к своему context.
- То есть suspension означает, что мы не блокируем, а только приостанавливаем поток, что в свою очередь означает возможность продолжить выполнение с того же места, но накладывает ограничение - suspension может случиться только в определённых местах (там, где можно вызвать fun с suspend модификатором)
* Показано, как мигрировать тесты
* И немного про работу с Kotlin Channels
#talk #rxjava #kotlin #coroutine
https://youtu.be/dQSLfj8EoVU
YouTube
#Mobile, Владимир Иванов, RxJava не нужен: меняем Rx на корутины в Котлине
Владимир Иванов
EPAM Systems
RxJava не нужен: меняем Rx на корутины в Котлине
Судя по опросам 61 процент людей начиная писать Android приложение на Kotlin будут использовать RxJava 2 в качестве инструмента для управления фоновой работой. Но у RxJava есть…
EPAM Systems
RxJava не нужен: меняем Rx на корутины в Котлине
Судя по опросам 61 процент людей начиная писать Android приложение на Kotlin будут использовать RxJava 2 в качестве инструмента для управления фоновой работой. Но у RxJava есть…
Статья от Романа Елизарова про
#kotlin #coroutine
CoroutineContext и CoroutineScope: что, как, зачем и почему.#kotlin #coroutine
Medium
Coroutine Context and Scope
Kotlin Coroutines have a context. There is a also a concept of coroutine scope that looks very much like a context. What’s the difference?
Рома Елизаров показывает, какие есть проблемы с
Кстати, на AppsConf у Вани @mistreckless будет доклад про то, как правильно этими самыми
#kotlin #flow #coroutine
Future, с suspend fun и с Channel и аккуратненько подводит к новому клубочку - Flow. Доступно это дело в kotlinx.coroutines, начиная с 1.2.0-alpha-2.Кстати, на AppsConf у Вани @mistreckless будет доклад про то, как правильно этими самыми
Channel пользоваться.#kotlin #flow #coroutine
Medium
Cold flows, hot channels
Kotlin coroutines were missing a primitive to represent cold asynchronous streams of data. Not anymore. Welcome Kotlin Flows.
Очередная статья про
#kotlin #flow #coroutine
Flow от Ромы Елизарова. Немножко показывается, как это дело устроено внутри, и рассказывается, как они борются с backpressure при помощи suspending functions.#kotlin #flow #coroutine
Medium
Simple design of Kotlin Flow
Peek under the hood of Kotin Flow design— a combination of language features and a library that enables a powerful abstraction.
И ещё немного про Reactive Streams и подход к дизайну Flow от Ромы нашего Елизарова.
#kotlin #flow #coroutine
#kotlin #flow #coroutine
Medium
Reactive Streams and Kotlin Flows
Kotlin Flows build on the foundation of Reactive Extensions and Reactive Streams with a flavor of Kotlin Coroutines.
До меня только доехала новость. Зашевелилась, родная! В OpenJDK ведётся работа над Project Loom. Если я всё правильно понимаю, то это как раз корутины. Зовут их там
Где-то кто-то говорил, что они смогут автоматом везде заменить
#jdk #openjdk #coroutine
Fiber. По сути своей - это lightweight threads. Строить планируют поверх готового ForkJoinPool в качестве scheduler и новой балалайки - Continuation. Где-то кто-то говорил, что они смогут автоматом везде заменить
Thread и всё, что с ним связано, на этот Fiber, повысив производительность бесплатно (то есть даром) + превратить все блокирующие вызовы в неблокирующие а-ля suspend функции из Kotlin, правда достоверного подтверждения этой красоты я пока что-то нигде не увидел.#jdk #openjdk #coroutine
Вот тут можно посмотреть, что сейчас происходит с Project Loom в Java (это то, что сначала называлось fibers, а теперь зовётся virtual thread). Это всё про те же легковесные потоки, которые бегут не поверх OS threads, а userspace JDK.
А вот тут чувак немного поэкспериментировал со всем этим богатством.
#java #loom #coroutine
А вот тут чувак немного поэкспериментировал со всем этим богатством.
#java #loom #coroutine
Habr
Project Loom: виртуальные потоки в Java уже близко
Несколько дней назад Ron Pressler разродился статьей State of Loom , которую не полайкал только самый ленивый джавист. Статья действительно хорошая, в ней много интересных метафор, которые я собираюсь...
Бывает, несёшь себе кофеёк к компу. Путь пролегает не самый близкий - покинуть кухню, преодолеть коридор, крадучись занести кружку в комнату, не обосрав тот любимый белый ковёр, и водрузить, наконец, дрожащими руками заветный напиток на рабочий стол.
А тут, на тебе, в коридоре, прямо под ногами, песок какой-то. Ясное дело, подставил кто-то. Гады. Ну ты-то не мог, ты-то ногами об коврик пошаркал, когда с прогулки возвращался. Сволочи. А кофе-то запахом манит. Да и пролить не хочется, они от нас только этого и ждут, Бубба.
Тут ты и принимаешь стратегическое решение аккуратненько ножкой так ать, и смести песок куда-то в сторону. Пусть это будет проблема выходного тебя.
Вот так и с сайд-эффектами, всё время их диверсанты какие-то в наш чудесный код добавляют. Но хочется же их аккуратненько куда-то под коврик замести, и чтобы только там они где-то и водились, и не отсвечивали, пока не позовут. И чтобы нельзя было ими наши замечательные чистые функции попортить.
Вот в этом посте смотрят на использование
#kotlin #coroutine #fp
А тут, на тебе, в коридоре, прямо под ногами, песок какой-то. Ясное дело, подставил кто-то. Гады. Ну ты-то не мог, ты-то ногами об коврик пошаркал, когда с прогулки возвращался. Сволочи. А кофе-то запахом манит. Да и пролить не хочется, они от нас только этого и ждут, Бубба.
Тут ты и принимаешь стратегическое решение аккуратненько ножкой так ать, и смести песок куда-то в сторону. Пусть это будет проблема выходного тебя.
Вот так и с сайд-эффектами, всё время их диверсанты какие-то в наш чудесный код добавляют. Но хочется же их аккуратненько куда-то под коврик замести, и чтобы только там они где-то и водились, и не отсвечивали, пока не позовут. И чтобы нельзя было ими наши замечательные чистые функции попортить.
Вот в этом посте смотрят на использование
suspend модификатора для этих целей. Интересная идея, пометить всё, у чего есть сайд-эффекты, тогда компилятор не даст нам чистые куски запятнать. Особенно интересно в контексте Redux-like подходов на эту идею посмотреть.#kotlin #coroutine #fp
👨💻 Jorge Castillo
Tracking side effects at compile time with suspend
Thinking of suspend as a Kotlin stdlib mechanism for flagging and tracking effects at compile time. Going declarative Functional Programming puts a lot of emphasis on achieving concern separation between the pure logics of a program (algebras) and the runtime…
“Когда не выходит насухо, стоит прибегнуть к смазке”. Шило же дурного не посоветует. Хлеб похорошеет, если его смазать маслом. Место укуса комара можно смазать специальным средством, чтобы не чесалось. Ну а всякую работу с View и анимациями Chris Banes решил смазать корутинами.
Вот тут описано, что там куда можно присобачить, чтобы дожидаться следующего прохода layout или окончания анимации прямо без коллбэка и прямо в корутине.
#ui #view #coroutine
Вот тут описано, что там куда можно присобачить, чтобы дожидаться следующего прохода layout или окончания анимации прямо без коллбэка и прямо в корутине.
#ui #view #coroutine
В блоге у Russ Cox (я хз, как его правильно транслитерировать) пост про добавление корутин в го. Да, корутин, да других. Основная идея - дать возможность выполнять что-то конкуретно, но не параллельно, а с блокированием и по запросу. Оформить это предлагается отдельной библиотекой, без изменений в языке, но с добавлением поддержки в рантайм, чтобы быстрее переключение контекстов происходило. Мне пока сложно понять, какой у этого юзкейс, но читается очень интересно.
#golang #coroutine
#golang #coroutine