
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

Quantum Harmonizer
20.06.2017
15:08:31

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()) }
}

Denis
20.06.2017
15:11:18

Ivan
20.06.2017
15:11:29

Quantum Harmonizer
20.06.2017
15:11:49
тоже медленнее будет ?
но уже не 6 к 13, а, например, 6 к 8

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

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

Denis
20.06.2017
15:16:05
ну ок
Ща наебеним

Руслан
20.06.2017
15:16:10
а еще @Param - разный размер коллекций
и вот тогда можно будет попробовать что-то обсуждать

Denis
20.06.2017
15:19:31

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

Михаил
20.06.2017
15:24:29
Но советую пощупать)

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

Denis
20.06.2017
16:04:31

Google

Dmitry
20.06.2017
16:04:38

Denis
20.06.2017
16:04:52

Dibro
20.06.2017
16:05:43

Denis
20.06.2017
16:05:58
уже ближе к нативным стримам джавы

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

Boris
20.06.2017
18:31:57
еще инициализация вот так вот выглядела немншк приятнее:
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
пожалуйста

Igor
20.06.2017
18:37:35

Руслан
20.06.2017
18:37:51

Denis
20.06.2017
18:37:59

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

Руслан
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
Слово "оп/сек" никто не смотрит?
Тьфу, не в ту колнку глянул, лол

Руслан
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
В вебчике не камильфо
ты и так запросы в тредах выполняешь(типичный веб), а потом поверх еще и стримов параллельных

Quantum Harmonizer
20.06.2017
19:22:12

Руслан
20.06.2017
19:23:04
ну если у тебя веб, и у тебя N ядер, и M клиентов. Притом что M > N, то толку от параллелизма на этом уровне мало
Просто бенч, видно что стримы вырываются вперед только на 10000
ось Y - логарифм, ops/s