Size: a a a

Kotlin Community

2020 July 31

OY

Oleg Yukhnevich in Kotlin Community
Kirill Timofeev
а чем, кстати, профайлил?
yourkit trial :)
он всё же поприятнее, чем profiler в идее
да и сейчас только комп на винде, так что там async даже нет ещё вроде
источник

KT

Kirill Timofeev in Kotlin Community
Oleg Yukhnevich
yourkit trial :)
он всё же поприятнее, чем profiler в идее
да и сейчас только комп на винде, так что там async даже нет ещё вроде
им очень опасно профилировать io часть
источник

KT

Kirill Timofeev in Kotlin Community
ну то есть, когда у вас не только CPU, но и ещё что-то
источник

OY

Oleg Yukhnevich in Kotlin Community
Kirill Timofeev
им очень опасно профилировать io часть
может быть...
я же говорю, что не очень спец по работе с байтиками
если кто-то хочет помочь, там где-то есть ссылка на репозиторий
источник

AN

Alexander Nozik in Kotlin Community
С байтиками там кстати можно попробовать использовать ядро ktor.
источник

OY

Oleg Yukhnevich in Kotlin Community
Oleg Yukhnevich
@noraltavir
в общем, попрофайлил ещё раз, с более-менее одинаковым кодом
java имплементация быстрее:
requestResponse: в 1.2 раза
requestStream: в 2.7 раза
requestChannel: в 2.4 раза
не пробовал делать что-то с buffer pool io, потому что там много expect/actual и internal api, не так много времени на это
так что, не в 10 раз, но в 2-3 раза медленнее
это уже думаю можно по большей части списать на мой код + на IO
эти результаты, если что kotlinx.benchmark на jvm (то есть здесь jmh)
источник

KT

Kirill Timofeev in Kotlin Community
Oleg Yukhnevich
эти результаты, если что kotlinx.benchmark на jvm (то есть здесь jmh)
а, ок, тогда норм
источник

OY

Oleg Yukhnevich in Kotlin Community
если кому ещё интересно
это flame graph одного теста, который делает много длинный запросов requestChannеl (2048 запросов по 2048 элементов параллельно)
если я правильно всё понимаю, то наиболее затратные вещи это работа с rsocket frames (Frame.toByteArray & FrameKt.toFrame на скрине) + сами каналы

(benchmarks: https://github.com/whyoleg/rsocket-kotlin/tree/perf/benchmarks/src/jvmMain/kotlin/dev/whyoleg/rsocket
тест на flame graph: https://github.com/whyoleg/rsocket-kotlin/blob/perf/rsocket-transport-test/src/commonMain/kotlin/dev/whyoleg/rsocket/TransportTest.kt#L130)
источник

AN

Alexander Nozik in Kotlin Community
Oleg Yukhnevich
если кому ещё интересно
это flame graph одного теста, который делает много длинный запросов requestChannеl (2048 запросов по 2048 элементов параллельно)
если я правильно всё понимаю, то наиболее затратные вещи это работа с rsocket frames (Frame.toByteArray & FrameKt.toFrame на скрине) + сами каналы

(benchmarks: https://github.com/whyoleg/rsocket-kotlin/tree/perf/benchmarks/src/jvmMain/kotlin/dev/whyoleg/rsocket
тест на flame graph: https://github.com/whyoleg/rsocket-kotlin/blob/perf/rsocket-transport-test/src/commonMain/kotlin/dev/whyoleg/rsocket/TransportTest.kt#L130)
Жаль, нет совершенно времени лезть в код. Там без kotlinx-io сделано? Буферы не переиспользуются?
источник

OY

Oleg Yukhnevich in Kotlin Community
Alexander Nozik
Жаль, нет совершенно времени лезть в код. Там без kotlinx-io сделано? Буферы не переиспользуются?
там используется ktor-io (т.е. kotlinx-io 0.1)
вроде как переиспользуются
источник

AN

Alexander Nozik in Kotlin Community
Oleg Yukhnevich
там используется ktor-io (т.е. kotlinx-io 0.1)
вроде как переиспользуются
да, переиспоьзуются. Но тогда там не должно быть конверсии в байт-массив. В общем, когда будет возможность (не знаю, когда), залезу.
источник

LS

Lev Shagalov in Kotlin Community
Переслано от Lev Shagalov
Почему when не работает в этом случае с sealed class указанным в аргументе?
источник

AN

Alexander Nozik in Kotlin Community
Lev Shagalov
Переслано от Lev Shagalov
Почему when не работает в этом случае с sealed class указанным в аргументе?
Должно работать . А что за ошибка?
источник

LS

Lev Shagalov in Kotlin Community
Ну оно работает, но требует else
источник

AN

Alexander Nozik in Kotlin Community
Lev Shagalov
Ну оно работает, но требует else
А, ну у тебя же должно быть полное перечислеиние. У тебя там только один наследник что ли?
источник

LS

Lev Shagalov in Kotlin Community
Да (Ну это временно)
источник

LS

Lev Shagalov in Kotlin Community
Но, этот sealed он в kotlin common модуле, который используется в kotlin jvm модуле, в котором и определен приведенный код
источник

VB

Viacheslav Blinov in Kotlin Community
Lev Shagalov
Ну оно работает, но требует else
Это потому что вы хотите присвоить результат. Если слева от when ничего не будет else не понадобится
источник

AL

Alexander Levin in Kotlin Community
Lev Shagalov
Переслано от Lev Shagalov
Почему when не работает в этом случае с sealed class указанным в аргументе?
Потому что sealed не дружит с дженериками: https://youtrack.jetbrains.com/issue/KT-21908
источник

AL

Alexander Levin in Kotlin Community
Но в вашем случае есть шанс, что вам и не нужен дженерик.
источник