
Max
15.03.2017
06:40:49
сколько памяти потреблял — не успел посмотреть, думал дольше будет
290221 кусков получилось

shadowjack
15.03.2017
06:41:45
Если у тебя есть ссылка на кусок бинари, то вся бинарь не будет освобождена. Может по этому?

Александр
15.03.2017
06:43:07
вот попробуй, тут числа тупо разделлённые \n

Google

Александр
15.03.2017
06:43:17
у меня обрабатывает 8 секунд
на других языках та же операция жрёт меньше двух
на том же ruby

zk
15.03.2017
06:43:49

shadowjack
15.03.2017
06:44:49
А чего не хочешь лениво читать построено?

Александр
15.03.2017
06:44:49
zk, ты чего хочешь доказать?
лениво лучше отрабатывает
но binary:split не должен хуже регекспа работать, разве нет?
причём сильно хуже
там внутри функция на несколько экранов
которая работает рекурсивно как я понял и жрёт память

Max
15.03.2017
06:47:38
чёт уже больше 8 секунд висит
память ща всю сожрёт :)))

Google

Александр
15.03.2017
06:48:15
в /erts/emulator/beam/erl_bif_binary.c
do_binary_find

Max
15.03.2017
06:49:13
всё очень плохо, короче
так и не раздуплилась

Александр
15.03.2017
06:49:27
на самом деле там всё мне понятно кроме bfs->type
зачем несколько раз продублирован код
очень неэффективный с виду

zk
15.03.2017
06:50:33
кидай эту сишку сюда
дай ссылку на гх

Александр
15.03.2017
06:52:02
https://github.com/erlang/otp/blob/master/erts/emulator/beam/erl_bif_binary.c
я специально профилировал beam, в варианте с регэкспом и бинарным сплитом
бинарный сплит почти всё время тратит на сборку мусора
теми же node.js и ruby я такую же задачу профилировал, там хоть сплит большую часть времени занимал
пхп вообще за 400 мс делает (((
питон за 600 (очень меня удивил)

shadowjack
15.03.2017
06:53:55
А C так вообще не успеешь замерить.

Александр
15.03.2017
06:54:12
gprof
ещё как успеешь =)
ааа, про скорость обработки?
на Си я слабо пишу у меня получилось 800мс

Google

Александр
15.03.2017
06:55:38
на голанг 400, с компиляцией через gccgo
но 8+ секунд и сожранная вся память от небольшого файлика за пределами добра и зла
причём на си реализация у эрланга

shadowjack
15.03.2017
06:56:38
Это конечно баг, да.

Max
15.03.2017
06:57:18
пиши в рассылку

Александр
15.03.2017
07:04:51
ого, а там уже есть предложение по оптимизации производительности
https://bugs.erlang.org/browse/ERL-374?jql=project%20%3D%20ERL
два дня назад добавил какой-то чувак
только про память он не сказал

Max
15.03.2017
07:08:44
забыл

shadowjack
15.03.2017
07:13:22
Да, я сейчас тоже попробовал в эрланге и оно тогос, сдохло.

Alexander
15.03.2017
07:18:32
и я не дождался результата

abc
15.03.2017
07:20:23

Александр
15.03.2017
07:20:43
3.5, вторая чуть быстрее (на 50мс)
на ноде, для сравнения 1.2 секунды эта же операция =)

abc
15.03.2017
07:21:40
пили пулл реквест в OTP! ) будешь внукам рассказывать

Александр
15.03.2017
07:22:31
я бы с удовольствием, но я выше писал что в Сях я слаб, я в юности на C++ лабал, но не смог написать вариант быстрее чем на питоне
я попытаюсь конечно, но всё же надеюсь на помощь данного чатика

Max
15.03.2017
07:23:35
ну там скорее не C надо знать, а разбираться в виртуальной машине ерланга хорошо
немного разные вещи

Alexander
15.03.2017
07:24:47
В пятнадцатом году проблема уже обсуждалась
http://erlang.org/pipermail/erlang-questions/2015-May/084670.html

Google

abc
15.03.2017
07:25:15

Александр
15.03.2017
07:25:41
не, до 15го года вообще реализация на эрланге была
и там предложили переписать на bif
потом пару раз оптимизировали, но косметически

abc
15.03.2017
07:27:22

Александр
15.03.2017
07:27:26
да
7.1

abc
15.03.2017
07:27:39
а 5 я думаю обосрался бы

Admin
ERROR: S client not available

abc
15.03.2017
07:27:51
интересно сравнение варианта на Java :)

Александр
15.03.2017
07:27:53
согласен
джаву не умею готовить

abc
15.03.2017
07:28:03
с прогретой JVM

Marat
15.03.2017
07:29:40

abc
15.03.2017
07:30:36
ну хотя бы общую концепцию углядеть, при условии что она быстрее конечно )

anton
15.03.2017
07:49:22
чего там надо написать и на каких данных запустить? а то вы тут 300+ выдали, не все прочитал :)

shadowjack
15.03.2017
07:50:47
Я просто попытался в iex этот файлик считать в бинарь и у меня машина в своп ушла

Rumata
15.03.2017
07:51:29
https://www.youtube.com/watch?v=XPlXNUXmcgE&feature=youtu.be&list=PLWbHc_FXPo2gaE8KWPbj0FMoT9DZL4Yuq
вообще по красоте

Google

anton
15.03.2017
07:51:39
а, бинарь:сплит ...

Rumata
15.03.2017
07:51:42
объясняет супер изи

Александр
15.03.2017
07:51:59
https://yadi.sk/d/jw7K_JE93FrCGZ
запускаешь erl
{_, Cont} = file:read_file("/tmp/1.txt").
Res = binary:split(Cont, <<"\n">>, [global]).
и у тебя сожрёт всю память
и проц прогреет от души
re:split(Cont, <<"\n">>).
а вот такой вполниться в разы быстрее (но тоже прилично памяти сожрёт)

abc
15.03.2017
07:56:14
хм. дак вроде писали же ранее, что если читать файл эрлангом то он в памяти раскрывается в 3 раза больше размер

Александр
15.03.2017
07:56:46
файл 79 мегабайт, а жрёт 16 гигабайт

abc
15.03.2017
07:56:57
издержки )

Александр
15.03.2017
07:57:03
=)
причём разбирается на сях, а не на эрланге
нафиг такие издержки

abc
15.03.2017
07:57:48
попробуй в эликсир через пайп

shadowjack
15.03.2017
08:00:35
Через стримы?

abc
15.03.2017
08:01:25
в видео выше жосе вроде про ээто и рассказывает

anton
15.03.2017
08:01:39

Александр
15.03.2017
08:03:38
на линуксе сжирает всё =)

anton
15.03.2017
08:03:47
выше 500 еще не прыгало.. все по дефолту. R18

shadowjack
15.03.2017
08:04:30
А какой эрланг?