@kotlin_lang

Страница 199 из 982
Denis
20.06.2017
15:06:42
Пруфы или небыло
# Run complete. Total time: 00:02:20 Benchmark Mode Cnt Score Error Units Bench.kotlinStream avgt 50 13,207 0,110 ns/op Bench.plain avgt 50 6,369 0,059 ns/op

тупой лист с фильтром и мапом из инта в дабл

Руслан
20.06.2017
15:07:18
ну и бенчмарк покажи

Просто вот тут котлин рвет https://kotlin.link/articles/The-Reactive-Scrabble-benchmarks.html

Google
Alexander
20.06.2017
15:08:20
А то чет по бенчам - говнище какое-то
Вообще не в тему, самые шустрые из всех. Если не берём paralel

Quantum Harmonizer
20.06.2017
15:08:31
тупой лист с фильтром и мапом из инта в дабл
Из-за боксинга, я думаю. Можно завести Performance Problem в YouTrack, если ещё нет.

Denis
20.06.2017
15:09:16
@Benchmark fun plain(): List<Double> { val result = ArrayList<Double>() for (i in sourceList) { if (i % 2 == 0) { result.add(Math.sqrt(i.toDouble())) } } return result } @Benchmark fun kotlinStream() : List<Double> { return sourceList .filter { i -> i % 2 == 0 } .map { Math.sqrt(it.toDouble()) } .toCollection(ArrayList(sourceList.size / 2 + 1)) }

Ну мб я не смог в бенчи, но чет хз, тут никаких лютых наворотов нет же

Quantum Harmonizer
20.06.2017
15:09:41
Что за sourceList?

Denis
20.06.2017
15:10:09
internal var sourceList: MutableList<Int> = ArrayList() init { for (i in 0..N - 1) { sourceList.add(i) } }

N - 10000

Руслан
20.06.2017
15:10:21
А зачем toCollection?

Quantum Harmonizer
20.06.2017
15:10:34
думаю, дело в toCollection, это лишнее копирование. [2]

Руслан
20.06.2017
15:10:48
И это вообще никак не стримы

Denis
20.06.2017
15:10:52
ArrayList(sourceList.size / 2 + 1)

Руслан
20.06.2017
15:10:56
Это просто коллекции

Google
Denis
20.06.2017
15:11:07
Сразу в толстый лист с нужным размером сует

Руслан
20.06.2017
15:11:08
вот так напиши: @Benchmark fun kotlinStream() : List<Double> { return sourceList .filter { i -> i % 2 == 0 } .map { Math.sqrt(it.toDouble()) } }

Ivan
20.06.2017
15:11:29
5 сек
я в тебя верю

Quantum Harmonizer
20.06.2017
15:11:49
тоже медленнее будет ?

но уже не 6 к 13, а, например, 6 к 8

Denis
20.06.2017
15:12:32
Интересно, во время вармапа шустро работает, но на 10-11 итерации сдыхает

вот так напиши: @Benchmark fun kotlinStream() : List<Double> { return sourceList .filter { i -> i % 2 == 0 } .map { Math.sqrt(it.toDouble()) } }
# Run complete. Total time: 00:02:20 Benchmark Mode Cnt Score Error Units Bench.kotlinStream avgt 50 10,482 0,112 ns/op Bench.plain avgt 50 6,420 0,074 ns/op

Руслан
20.06.2017
15:15:34
а теперь сравни с java8 stream

и еще sequence

Denis
20.06.2017
15:16:05
ну ок

Ща наебеним

Руслан
20.06.2017
15:16:10
а еще @Param - разный размер коллекций

и вот тогда можно будет попробовать что-то обсуждать

Руслан
20.06.2017
15:20:08
https://github.com/KotlinBy/kotlin-benchmarks/blob/master/src/main/kotlin/by/bkug/benchmarks/ModifyingImmutableList.kt#L14

Dibro
20.06.2017
16:02:35
Шта?
а я тебя помню, ты тот ридонли парень из рн

Denis
20.06.2017
16:04:31
а я тебя помню, ты тот ридонли парень из рн
Типа того, иногда набрасываю.

Google
Denis
20.06.2017
16:04:52
а я тебя помню, ты тот ридонли парень из рн
Но сейчас там скучно, все никак не разродятся на единую либу навигации

Dibro
20.06.2017
16:05:43
Denis
20.06.2017
16:05:58
sequence
Он оказался побыстрее, да

уже ближе к нативным стримам джавы

Dibro
20.06.2017
16:10:21
Аватарка палит?
ну и имя помню

Denis
20.06.2017
16:10:43
Подстава, но медвед норм вышел. Менять не буду.

Dibro
20.06.2017
16:22:19
Подстава, но медвед норм вышел. Менять не буду.
у меня кстать таки получилось запустить котлин под рн

Ivan
20.06.2017
16:22:46
Denis
20.06.2017
16:23:02
Denis
20.06.2017
16:23:06


Но "ОНИ БЛИЗКО, КАРЛ!!"

Ivan
20.06.2017
16:24:54
Пока мы
Так держать

Quantum Harmonizer
20.06.2017
16:32:53
некорректное название kotlinStream осталось :)

Denis
20.06.2017
17:24:52
некорректное название kotlinStream осталось :)
Извините, лень сейчас 15 минут на тесты заводить чисто из-за названия

Boris
20.06.2017
18:31:57
вот так напиши: @Benchmark fun kotlinStream() : List<Double> { return sourceList .filter { i -> i % 2 == 0 } .map { Math.sqrt(it.toDouble()) } }
еще вот так можно попробовать, чтобы лишний раз не обходить: @Benchmark fun kotlinStream() : List<Double> { return sourceList .asSequence() .filter { i -> i % 2 == 0 } .map { Math.sqrt(it.toDouble()) } .toList() }

еще инициализация вот так вот выглядела немншк приятнее: const val N = 10000 private val sourceList = (0..N).toList()

Руслан
20.06.2017
18:33:16


Google
Руслан
20.06.2017
18:33:47
пожалуйста, сиквенс быстрее в два раза стримов, а просто работа с коллекциями в функциональном стиле быстрее на порядок

так что джава проиграла

Denis
20.06.2017
18:36:06
Руслан
20.06.2017
18:36:54
https://github.com/KotlinBy/kotlin-benchmarks/blob/master/src/main/kotlin/by/bkug/benchmarks/Collections.kt

пожалуйста

Руслан
20.06.2017
18:37:51
Denis
20.06.2017
18:37:59
на порядок это на 1 элементе?
Ну и там как-бы операций в секунду

Igor
20.06.2017
18:38:17
??

Denis
20.06.2017
18:38:29
Бенч немного другое показывает же

Admin
ERROR: S client not available

Руслан
20.06.2017
18:38:46
показывает накладные расходы

можно еще baseline провести

в виде простого for

Denis
20.06.2017
18:39:24
в виде простого for
он всех разрывает

Руслан
20.06.2017
18:39:35
только так все равно никто не пишет)

я писал последний раз fori когда проект на java 6 попался

Ну т.е. в итоге джава проиграла по перформансу для обычных задач примерно в два раза

Denis
20.06.2017
18:46:58
сейчас фильтром разбавим и посмотрим

Руслан
20.06.2017
18:47:17
В моем вебчике я вижу работу с листами около 100 в среднем

Google
Denis
20.06.2017
18:48:27
В моем вебчике я вижу работу с листами около 100 в среднем
А тебя не смущает, что у джавы 41к оп/сек, а у сиквенсов - 24к ?

Слово "оп/сек" никто не смотрит?

Тьфу, не в ту колнку глянул, лол

Руслан
20.06.2017
18:49:43
а, ты в ошибку смотришь. я думаю откуда цифры

Denis
20.06.2017
18:49:55
Съебланил, сорян

Посмотрим как с фильтром поедет

Roman
20.06.2017
19:00:33
Вы там что ли блог пост напишите по результатам

Denis
20.06.2017
19:02:10
Вы там что ли блог пост напишите по результатам
Да прост интересно, почему бы и нет?

Руслан
20.06.2017
19:07:40
не работать же в самом деле

Denis
20.06.2017
19:08:29


Просто добавлен filter { it % 2 == 0}

Руслан
20.06.2017
19:09:30
average time совсем не информативно выглядит

Denis
20.06.2017
19:10:26
Ну хз хз

Ладно, чуть попозже забенчаю с другим режимом

Quantum Harmonizer
20.06.2017
19:19:45
он всех разрывает
Псс, парни, как насчёт параллельных стримов?

Руслан
20.06.2017
19:20:22
В вебчике не камильфо

ты и так запросы в тредах выполняешь(типичный веб), а потом поверх еще и стримов параллельных

Руслан
20.06.2017
19:23:04
ну если у тебя веб, и у тебя N ядер, и M клиентов. Притом что M > N, то толку от параллелизма на этом уровне мало



Просто бенч, видно что стримы вырываются вперед только на 10000



ось Y - логарифм​, ops/s

Страница 199 из 982