Size: a a a

Programming Offtop

2021 March 03

OY

Oleg Yukhnevich in Programming Offtop
Кирилл Романенко
Судя по моим тестам, она чуть быстрее.
Чуть?)
В тестах?

Очень важно :)
источник

КР

Кирилл Романенко... in Programming Offtop
Oleg Yukhnevich
Чуть?)
В тестах?

Очень важно :)
Так runBlocking не только в тестах нужен.
источник

I

Ilmir in Programming Offtop
Кирилл Романенко
Да, но при этом нет хуйни типо: вот вам runBlocking если вы хотите скоупы и проч, а вот вам runSuspend если не хотите, а вам просто надо запускать suspend функции в тестах.
Если просто хотите запускать корутины в тестах - runTest.
источник

КР

Кирилл Романенко... in Programming Offtop
Ilmir
Если просто хотите запускать корутины в тестах - runTest.
Нет, мне не только в тестах надо. Из юая изредка вызываю, и кое-где ещё.
источник

AM

Andrew Mikhaylov in Programming Offtop
Кирилл Романенко
Нет, мне не только в тестах надо. Из юая изредка вызываю, и кое-где ещё.
Кого, ранБлокинг из юая? А зачем?..
источник

I

Ilmir in Programming Offtop
Кирилл Романенко
Окей, но какой алгоритм лучше? Или дешевле? У них же должна быть хоть какая-то разница.
Сейчас запустил просто обе функции по 10 раз в jmh с прогревом в 5 запусков - runSuspend показывает себя куда лучше:
runBlocking = 0,010 ±(99.9%) 0,001 ms/op [Average]
runSuspend = 0,007 ±(99.9%) 0,001 ms/op [Average]

Я понимаю что runSuspend доступен только в jvm, но почему тогда реализация runBlocking на jvm не проксирует runSuspend?
Начнём с того, что runSuspend не получает CoroutineContext. То есть, у него самая минимальная реализация потому что мы точно знаем, кто и как его вызывает.
источник

КР

Кирилл Романенко... in Programming Offtop
Andrew Mikhaylov
Кого, ранБлокинг из юая? А зачем?..
Да, ранблокинг из юая. Не скажу.) Но без него там дёргается юай, а с ним нет. Потому что внешний опаздывает на несколько миллисекунд, но без ранблокинга на быстрых устройствах это заметно. Ранблокинг крутой, но в меру.
источник

I

Ilmir in Programming Offtop
Ilmir
Начнём с того, что runSuspend не получает CoroutineContext. То есть, у него самая минимальная реализация потому что мы точно знаем, кто и как его вызывает.
Второе (следует из первого) - runSuspend не поддерживает интерсепторов.
источник

КР

Кирилл Романенко... in Programming Offtop
Ilmir
Начнём с того, что runSuspend не получает CoroutineContext. То есть, у него самая минимальная реализация потому что мы точно знаем, кто и как его вызывает.
А мне и зачастую там и не нужен CoroutineContext.
источник

I

Ilmir in Programming Offtop
Кирилл Романенко
А мне и зачастую там и не нужен CoroutineContext.
Не передавай его в runBlocking.
источник

КР

Кирилл Романенко... in Programming Offtop
Ilmir
Не передавай его в runBlocking.
Так зачем нужен runBlocking, если мне просто надо запустить суспенд функцию и дождаться результата в блокирующем режиме? runSuspend покарывает мои кейсы и, по моим данным, работает на 30% быстрее, но на него почему-то навесили интернал.
источник

I

Ilmir in Programming Offtop
Кирилл Романенко
Так зачем нужен runBlocking, если мне просто надо запустить суспенд функцию и дождаться результата в блокирующем режиме? runSuspend покарывает мои кейсы и, по моим данным, работает на 30% быстрее, но на него почему-то навесили интернал.
Если надо просто запустить, то и runSuspend не нужен. Есть startCoroutine.
источник

КР

Кирилл Романенко... in Programming Offtop
Ilmir
Если надо просто запустить, то и runSuspend не нужен. Есть startCoroutine.
Так мне туда надо свой континуэйшен передавать, а runSuspend делает это за меня.
источник

I

Ilmir in Programming Offtop
Кирилл Романенко
Так мне туда надо свой континуэйшен передавать, а runSuspend делает это за меня.
Есть функция Continuation, которая создаёт континуэйшн. Достаточно один раз написать что-то типа

fun runCoroutine(c: suspend () -> Unit) {
 c.startCoroutine(Continuation(EmptyCoroutineContext) { it.getOrThrow() })
}
и юзать в своём коде, если не хочется runBlocking использовать.
источник

AA

Albert Abdullin in Programming Offtop
Вы тут котлин что ли обсуждаете. Я начал читать про дженереки в котлин, а остановился на ко/и/контр - вариантности. Сколько изучал и писал на джава, никогда не слышал такие слова. Прям какое-то микро- просветление наступило в отношении наследования
источник

с#

саша сок #KotlinGang... in Programming Offtop
Albert Abdullin
Вы тут котлин что ли обсуждаете. Я начал читать про дженереки в котлин, а остановился на ко/и/контр - вариантности. Сколько изучал и писал на джава, никогда не слышал такие слова. Прям какое-то микро- просветление наступило в отношении наследования
повезло, я когда читал сначала ничего не понял. но это потому что так читал.
источник

КР

Кирилл Романенко... in Programming Offtop
Ilmir
Есть функция Continuation, которая создаёт континуэйшн. Достаточно один раз написать что-то типа

fun runCoroutine(c: suspend () -> Unit) {
 c.startCoroutine(Continuation(EmptyCoroutineContext) { it.getOrThrow() })
}
и юзать в своём коде, если не хочется runBlocking использовать.
Хм, а это круто, спасибо.)
источник

AA

Albert Abdullin in Programming Offtop
саша сок #KotlinGang
повезло, я когда читал сначала ничего не понял. но это потому что так читал.
Так и я в доке абсолютно ничего не понял. Нагуглил цикл статей от одного чувака, который круто разжевал это все
источник

AA

Albert Abdullin in Programming Offtop
Он, судя по всему, дикий фанат котлин. Ну и хороший учитель заодно
источник

I

Ilmir in Programming Offtop
саша сок #KotlinGang
повезло, я когда читал сначала ничего не понял. но это потому что так читал.
источник