Comments 22
На моей машинке Rust-овская версия отрабатывает за 80-85ms. Неплохо, трехкратный рост только за счет использования Rust-a
Или можно просто написать быстрый js код
exports.search = function search(corpus, search) {
var total = corpus.match(new RegExp("(\\W+|^)"+search+"(\\W+|$)","g"));
return total.length;
}
такое решение работает в три раза быстрее чем код на Rust в вашем примере.
Привет КЭП.
Подозреваю, что код примера всё же специально сделан без использования регулярных выражений, т.к. это убило бы необходимость в нём.
Подозреваю, что код примера всё же специально сделан без использования регулярных выражений, т.к. это убило бы необходимость в нём.
Это понятно, что код примера сделан специально чтобы показать насколько модуль на Rust "быстрее" чем Javascript.
В реальной жизни, производительность кода зависит в первую очередь от используемых алгоритмов а не от языка. Если JS код тормозит, надо посмотреть нельзя ли ее улучшить, а не переписывать на "быстром" языке
В реальной жизни, производительность кода зависит в первую очередь от используемых алгоритмов а не от языка. Если JS код тормозит, надо посмотреть нельзя ли ее улучшить, а не переписывать на "быстром" языке
Не понимаю зачем этот спор.
Если задел чем-то — эмм… ок, хорошо, учту, сорян.
Если пофилософствовать хочется: реальность у всех своя.
И даже далеко не факт, что то, как видит мир один индивидуум, полностью соотносится с тем, как видит мир другой.
Т.е., если мы возъмём просто даже зрение, то собственные руки кому-то могут казаться сепульками из сепулькария, а другому вполне себе руками. Но это не отменяет того, что они смогут подразумевать под руками одно и то же.
Т.о., если мы используем вполне себе конкретное понятие "регулярные выражения" в месте где конкретика отсутствует — "реальной жизни" — то о чём здесь вообще речь? Есть ли смысл отвязывать контекст от объекта и субъекта предмета разговора?
Примерно об этом я и хотел сказать, говоря об очевидности утверждения, что регулярки будут быстрей.
Если задел чем-то — эмм… ок, хорошо, учту, сорян.
Если пофилософствовать хочется: реальность у всех своя.
И даже далеко не факт, что то, как видит мир один индивидуум, полностью соотносится с тем, как видит мир другой.
Т.е., если мы возъмём просто даже зрение, то собственные руки кому-то могут казаться сепульками из сепулькария, а другому вполне себе руками. Но это не отменяет того, что они смогут подразумевать под руками одно и то же.
Т.о., если мы используем вполне себе конкретное понятие "регулярные выражения" в месте где конкретика отсутствует — "реальной жизни" — то о чём здесь вообще речь? Есть ли смысл отвязывать контекст от объекта и субъекта предмета разговора?
Примерно об этом я и хотел сказать, говоря об очевидности утверждения, что регулярки будут быстрей.
Ну так в данном случае вы тестируете очень оптимизированный сишный код. Некорректное сравнение в общем. Хотя версию на Rust тоже думаю можно оптимизировать, я так подозреваю, что split всё-таки выделяет кучу памяти и делает кучу ненужной работы. Если написать на конечном автомате, то можно обогнать и вариант с регулярками.
Аффтар, ЖЖОШ!
Спасибо огромное! Это Гениально!
Постоянно сталкиваюсь с необходмостью распараллеливания вычислений на Node.
Основной аспект, который мне необходим — многопоточная обработка очередей сообщений.
Пожалуйста, скажи, правильно ли я понимаю, что если я возьму Neon, то смогу, например, засунуть в него Worker'ы, разгребающие приходящие в очередь сообщения, и это потенциально будет многопоточно и потокобезопасно?
Сейчас я это реализую через require('child_process').[fork||spawn](), или через require('cluster').
Но очень хочется чего-нибудь более понятного для нубов, и более производительного.
Спасибо огромное! Это Гениально!
Постоянно сталкиваюсь с необходмостью распараллеливания вычислений на Node.
Основной аспект, который мне необходим — многопоточная обработка очередей сообщений.
Пожалуйста, скажи, правильно ли я понимаю, что если я возьму Neon, то смогу, например, засунуть в него Worker'ы, разгребающие приходящие в очередь сообщения, и это потенциально будет многопоточно и потокобезопасно?
Сейчас я это реализую через require('child_process').[fork||spawn](), или через require('cluster').
Но очень хочется чего-нибудь более понятного для нубов, и более производительного.
Автор, если что — sorry за вопросы, я понимаю что это был перевод.
Просто у Вас так получилось проникнуться контекстом, что создалось ощущение полного погружения.
Просто у Вас так получилось проникнуться контекстом, что создалось ощущение полного погружения.
разгребающие приходящие в очередь сообщения, и это потенциально будет многопоточно и потокобезопасно?
Не автор но отвечу. Да, но — javascript блокируется на время исполнения rust-кода — это цена безопасности. так что увы и ах — но не везде это применимо. На очередь сообщений — точно, ибо обычно там важно время отклика. Тут, мне кажется без кластера не обойтись.
Вам бы, да в Go
Эо клево.
Надо попробовать, насколько геморройно это на Windows, потому что C++-расширения — это боль: поставь питон, да не той версии, пропиши системную переменную, поставь студию, пропиши еще парочку переменных, передай параметр в npm install.
Надо попробовать, насколько геморройно это на Windows, потому что C++-расширения — это боль: поставь питон, да не той версии, пропиши системную переменную, поставь студию, пропиши еще парочку переменных, передай параметр в npm install.
Спасибо, очень интересно. На прошлой неделе на конференции Ulcamp Winter как раз мельком упоминали Neon и Rayon.
Я одного не понял — зачем в конструкции Node + Rust нужен Node?
На моей машинке Rust-овская версия отрабатывает за 80-85ms
Это чистая "Rust-овская версия" или уже с бриджем из ноды? Интерeсно какой оверхэд на вызов Rust методов?
с бриджем. В статье ссылочка кривая, вот верная, там все видно https://github.com/dherman/wc-demo/blob/master/native/src/lib.rs
вот здесь: https://blog.risingstack.com/how-to-use-rust-with-node-when-performance-matters/ рассматривают процесс более низкоуровнево и заодно отмечают что вообще то вызов дорогой:
но насколько — не говорится. В общем мерять надо.
There's a significant cost in FFI calls, so make them worth it. (Nathan Rajlich)
но насколько — не говорится. В общем мерять надо.
Sign up to leave a comment.
Neon: Node + Rust