Разработка ждёт балета
1.66K subscribers
509 photos
4 videos
15 files
1.54K links
What I cannot create, I do not understand.

DM: @alexey_mileev
PeerLab: https://xn--r1a.website/+e2ND1tAa0lU2ZTli
Download Telegram
Сразу две статьи из серии, в которой планируется рассказать об уроках, вынесенных из разработки 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/
@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
Рома Елизаров показывает, какие есть проблемы с Future, с suspend fun и с Channel и аккуратненько подводит к новому клубочку - Flow. Доступно это дело в kotlinx.coroutines, начиная с 1.2.0-alpha-2.

Кстати, на AppsConf у Вани @mistreckless будет доклад про то, как правильно этими самыми Channel пользоваться.

#kotlin #flow #coroutine
Очередная статья про Flow от Ромы Елизарова. Немножко показывается, как это дело устроено внутри, и рассказывается, как они борются с backpressure при помощи suspending functions.

#kotlin #flow #coroutine
До меня только доехала новость. Зашевелилась, родная! В OpenJDK ведётся работа над Project Loom. Если я всё правильно понимаю, то это как раз корутины. Зовут их там 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
Бывает, несёшь себе кофеёк к компу. Путь пролегает не самый близкий - покинуть кухню, преодолеть коридор, крадучись занести кружку в комнату, не обосрав тот любимый белый ковёр, и водрузить, наконец, дрожащими руками заветный напиток на рабочий стол.
А тут, на тебе, в коридоре, прямо под ногами, песок какой-то. Ясное дело, подставил кто-то. Гады. Ну ты-то не мог, ты-то ногами об коврик пошаркал, когда с прогулки возвращался. Сволочи. А кофе-то запахом манит. Да и пролить не хочется, они от нас только этого и ждут, Бубба.
Тут ты и принимаешь стратегическое решение аккуратненько ножкой так ать, и смести песок куда-то в сторону. Пусть это будет проблема выходного тебя.
Вот так и с сайд-эффектами, всё время их диверсанты какие-то в наш чудесный код добавляют. Но хочется же их аккуратненько куда-то под коврик замести, и чтобы только там они где-то и водились, и не отсвечивали, пока не позовут. И чтобы нельзя было ими наши замечательные чистые функции попортить.
Вот в этом посте смотрят на использование suspend модификатора для этих целей. Интересная идея, пометить всё, у чего есть сайд-эффекты, тогда компилятор не даст нам чистые куски запятнать. Особенно интересно в контексте Redux-like подходов на эту идею посмотреть.

#kotlin #coroutine #fp
“Когда не выходит насухо, стоит прибегнуть к смазке”. Шило же дурного не посоветует. Хлеб похорошеет, если его смазать маслом. Место укуса комара можно смазать специальным средством, чтобы не чесалось. Ну а всякую работу с View и анимациями Chris Banes решил смазать корутинами.
Вот тут описано, что там куда можно присобачить, чтобы дожидаться следующего прохода layout или окончания анимации прямо без коллбэка и прямо в корутине.

#ui #view #coroutine
В блоге у Russ Cox (я хз, как его правильно транслитерировать) пост про добавление корутин в го. Да, корутин, да других. Основная идея - дать возможность выполнять что-то конкуретно, но не параллельно, а с блокированием и по запросу. Оформить это предлагается отдельной библиотекой, без изменений в языке, но с добавлением поддержки в рантайм, чтобы быстрее переключение контекстов происходило. Мне пока сложно понять, какой у этого юзкейс, но читается очень интересно.

#golang #coroutine