
Alexey
28.03.2017
21:52:33
по го, вроде бы я быстрее смог скопировать код. но запарился сам Го настраивать. какие-то там пути. хотя на орандже гошка так поставился. и собрал апп без настроек

Александр
28.03.2017
21:53:09

Alexey
28.03.2017
21:53:16
в эликсир же, я думаю, так просто не заедешь. надо mix ом сначала апп создать. потом к нему прикрутить ковбой и плаг. ну и так далее

Александр
28.03.2017
21:53:18
ну и вообще скорость решения задачи

Google

Alexey
28.03.2017
21:53:37
так что тут можно сказать, что Го победил. и по скорости моей на нем разработки

Александр
28.03.2017
21:53:40

Alexey
28.03.2017
21:53:44
и по понятности кода и того, как он работает

Александр
28.03.2017
21:53:49
на нём быстро едешь

Alexey
28.03.2017
21:54:04
в эликсир же в эти плаги сразу можно и не заехать

Александр
28.03.2017
21:54:19

Alexey
28.03.2017
21:54:42

Александр
28.03.2017
21:54:50
ну для быстрой разработки

Alexey
28.03.2017
21:55:49
не. феникс - понятно. ты просто посмотри на код на го. вот роутер чем - то похож. логикой и размерами
феникс там было бы вообще - феникс про фому, а Го - про ерёму

Александр
28.03.2017
21:56:35
попробуй поставить gccgo и вот так скомиплить
go build -compiler gccgo -gccgoflags "-march=native -O3" app.go

Alexey
28.03.2017
21:57:12
ок. записал, попробую

Александр
28.03.2017
21:57:19
роутер - это не просто get и '/' указать, это динамические части, скоупы и.т.п.

Google

Александр
28.03.2017
21:57:26
в реальном приложении
простейшие пути я очень редко использовал, даже для карманных проектов

Alexey
28.03.2017
21:58:10
еще у меня есть где-то свой велосипед по парсу входящих http. вот можно будет померять, разницу в active true/false режимах приема данных. и обработке входящих разным количеством акцепторов

Александр
28.03.2017
21:58:39
бенчмарки - зло, показывают абстрактных попугаев, которые часто с реальными задачами не связаны

Alexey
28.03.2017
21:58:58
ну то есть, можно было вообще на голых бинари это все промерять. тут не будет просадок на том, что не видно под капотом ковбоя и роутера
кстати, да. ab, wrk и jmeter показывают в деталях очень разное
а вот еще вопрос. как понимать этот вот график
в AB тоже есть такое же. только в текстовом виде.


Александр
28.03.2017
22:04:09
го строго типизированный язык, он по определению быстрее языков в нестрогой типизацией
за магию надо платить
у тебя точно задачи где нужны простейшие веб-серверы которые потянут миллионы соединений?
когда я в последний раз обсуждал на хабре подобный вопрос, так оказалось что чуваку и рубей было достаточно по скорости =)
но он перешёл на голанг - "потому что захотелось"
если "захотелось", то бенчмарки не нужны =)

Alexey
28.03.2017
22:06:18
я хотел понять, почему такой результат ) за ерланг было обидно
ну и от части даже что-то для себя по-своему понял, когда провел тест в других условиях

Александр
28.03.2017
22:07:17
совсем не обидно
хочешь магии в коде - будь готов что он будет медленнее исполнятся,
хочешь скорости - сиди и типы данных контролируй вручную
в эрланге декларативный код, который наглядный, легко тестировать и изменять

Google

Александр
28.03.2017
22:07:59
в голанге императивная лапша
но зато всё шустрое =)
всё честно

Alexey
28.03.2017
22:08:20
дык получилось то так, что ерланг оказался быстрее го
и по wrk и по ab

Александр
28.03.2017
22:08:35
в рубях много магии, он вообще на порядки медленее их всех

Alexey
28.03.2017
22:08:47
либо я их не так запустил. не с теми параметрами. как понять?

Александр
28.03.2017
22:09:11
он не должен оказаться быстрее го
во первых поставь либу что я выше кинул

Alexey
28.03.2017
22:09:29
всё честно
кстати да. там можно даже честно запустить приложение в один thread.

Александр
28.03.2017
22:09:37
она реально в 10 раз быстрее чем net/http
во вторых скомпилируй gccgo

Александр
28.03.2017
22:10:03
у меня на нём выше результаты всегда получались
там реально оптимизаций больше чем в родном компиляторе

Alexey
28.03.2017
22:10:23
ок. записал. но явно не сегодня ) тема то интересная
а ab и wrk показали небольшое отклонение в пользу ерланга
но по htop было видно, что и ядра они загружают по-разному. это тоже, считаю, надо учитывать
ерланг скушал 4 ядра. а если бы их было одно? либо машину натравить на одно?

Александр
28.03.2017
22:22:49
у меня go использует все ядра из коробки

Google

Alexey
28.03.2017
22:23:40
ну может fasthttp тоже использует

Александр
28.03.2017
22:24:44
нет
на твоём примере

Alexey
28.03.2017
22:25:20
а. понял. интересно, почему так
у меня он ядра поочередно менял. раз в 10 секунд примерно
ты как запускаешь го приложение?
так же, как и я, бинарник?

Александр
28.03.2017
22:26:24
go run 1.go

Alexey
28.03.2017
22:26:47
а я делал build и запускал

Admin
ERROR: S client not available

Александр
28.03.2017
22:27:28
с билдом тоже всё хорошо
попробуй может GOMAXPROCS переменной окружения порулить
может у тебя go старый?
меньше 1.5?
он там на одном ядре по умолчанию работал

shadowjack
28.03.2017
22:43:24
Я походу открыл новую синтаксическую плюшку эликсира.
for x <- 1..10, (x2 = x*x; x2 < 30), do: x2
так можно биндить переменную в фильтре for-а.

Alexey
28.03.2017
23:31:18

Google

shadowjack
28.03.2017
23:32:15
Можно и по простому, for x <- 1..10, x2 = x*x, x2 < 30, do: x2 но если переменная которую биндишь будет равна false то он этот результат выкинет.

Alexander
28.03.2017
23:34:33
почитал я тут выше в чатике попытки сравнения эликсира и го

shadowjack
28.03.2017
23:34:35
iex(24)> for x <- [true, true, false], (y = not x; is_boolean(x)), do: y
[false, false, true]
iex(25)> for x <- [true, true, false], y = not x, is_boolean(x), do: y
[true]

Alexey
28.03.2017
23:36:16
и решил все удалить, как политическую пропоганду? )


Alexander
28.03.2017
23:36:23
мои сайд проджекты пережили переход по всему колесу технологий. Ruby,Го, nodejs и теперь вот эликсир. Даже на кристале что-то пытался, но там адовейший пиздец, даже их канонический пример умирает по памяти если его ab тестировать.
вообщем после всех переходов могу сказать, что api на elixir/nodejs - самый верный вариант. Все другое - ад и шлак. Что в поддержке, что в написании.
го перкрасно себя показал, в ваакуме
равно, как и толстожопый Маккорд распинался что мол феникс быстрый - вранье. Дай боже 30мс выжмете в проде, даже без базы
но главный козырь Эликсира, почему я не съебал из этого чатика в ужасе. - какая-то сатанинская консистентность сервиса
проще говоря, написанный апи на элисире на 2-3х нодах одинаково прекрасен с 1 до миллионов запросов.
где nodejs на кластеризировать в сотни процессов, где руби просто умер еще полчаса назад, а го захлебнулся начиная отдавать респонсы в х100 медленнее, а некоторые тупо не обслуживая
эликсир выруливает
спасибо эрлангу под капотом


Alexey
28.03.2017
23:43:00
да. тупо работает. но я вот ерл и его вм воспринимаю вообще, как ОС
как полноценная самодостаточная ось. которая концептуально просто уже очень зрелая. а это только благодаря годам и опыту в телефонии, видимо

Alexander
28.03.2017
23:43:53
все кулстори что пилятся мол мы заменили нашу баржу с серверами двумя Рассберри пай и обслуживаем 100кк запросов - правда

Alexey
28.03.2017
23:44:23
даже вот банально тему Time Warp копнул. и там так все проработали. и разрывы времени, и как с этим жить... и так оно во всем
ну вот у меня Orange PI. и я вот не знаю даже сколько она переживет

Alexander
28.03.2017
23:45:22
эликсир дает возможность свежую кровь в эрланг пустить

Alexey
28.03.2017
23:45:47
мне трудно сказать, много ли это - 18к RPS
другое дело, что она помрет, если в ней банально выполнить 1..10000000 в лист
в память уперлась (там всего 512 мБ) - вм упала. подключил свап. ушла в свап. ну хоть не упала )