Как стать автором
Обновить

Комментарии 19

Весь этот параллелизм, однопоточен, а значит не будет возникать проблем с отладкой и синхронизацией, множества исполняемых потоков.

Во-первых, вы путаете параллелизм (которого в ноде нет) с асинхронностью. Вот тут неплохо расписано: https://ru.stackoverflow.com/a/416086/178362. Фраза «параллелизм однопоточен» — это оксюморон.

Во-вторых, если у вас возникают проблемы с отладкой и синхронизацией множества потоков — значит вам зачем-то потребовалось множество потоков, и решать такую задачу возвращением в один поток — все равно, что лечить перхоть усекновением главы.

В-третьих, у ноды есть свои преимущества (наверное), но выдавать за одно из них — невозможность распараллелить выполнение на все процессоры — это немного за гранью.

вы путаете параллелизм

А мне кажется это вы путаете параллелизм и многопоточку

параллелизм (которого в ноде нет)

Воркеры..... нееее не, слышал

Судя по уровню комментария Вы шарите в JS, чуть меньше чем никак. Зачем расписывать то о чем вы не в зуб ногой, не в попу пальцем?

мне кажется

Бывает. Но я ничего не путаю.

Воркеры..... нееее не, слышал

Слышал я про воркеры, это абсолютно неработоспособный костыль в хотя бы слегка нагруженной среде. Всё горизонтальное масштабирование, на которое способна нода — это воткнуть побольше изолированных серверов за балансером.

Судя по уровню комментария

Не вам судить об уровне моего комментария.

абсолютно неработоспособный костыль

Почему же? У меня есть кейсы когда эта штука здорово помогала поднять перфоманс

Не вам судить об уровне моего комментария

Пффф больше пафоса! Того что Вы написали в комментарии достаточно понять что на JS, Вы не пишите. Но зачем-то оставляете критические замечания по технологии в которой не разбираетесь. Насколько это адекватно?

«Я за всю жизнь не снёс ни единого яйца, что никак не мешает мне судить о качестве омлета лучше любой курицы» — Бернард Шоу.

Я не пишу на JS не потому, что не умею, или не разбираюсь, а потому, что в задачах, которые приходится решать мне, — проще взять тормоз от башенного крана, чем ноду — будет и то производительнее.

Я не пишу на JS

Я это и так заметил. Ещё заметил что не особо владеете мат частью по языку, от чего пишите чушь. Зачем?

Просто трудно понять зачем оно Вам? Вот я допустим не пишу на шарпах. Но мне и голову не придёт идти в статейку по ним и кричать что какой нибудь PHP лучше. Я давно понял что язык это просто инструмент, важнее тот кто за него берётся. Дай в руки мастера кривую стамеску он и с ней сделает шедевр. Да в руки дебилу самый дорогой тул, он всё испортит, да ещё и без глаза останется

параллелизм (которого в ноде нет)

Строго говоря, в этом смысле параллелизма нет ни в одной программной среде, т.к. параллелизм — атрибут железа, а не софта. Поэтому отдельно упрекать в этом именно ноду — некорректно.

Это все равно, что утверждать, будто качество десерта — атрибут вазочки, в которой его подали. Если я запускаю софт на железяке с восемью процессорами, я ожидаю равномерную загрузку этих процессоров без необходимости полностью переписать код.

Вот за это отвечает как раз язык.

Если я запускаю софт на железяке с восемью процессорами, я ожидаю равномерную загрузку этих процессоров без необходимости полностью переписать код

Разрабы на высокоуровневых ЯПах о таком не задумываются)

Я опираюсь на то определение параллелизма, которое Вы же и привели. Там как раз про вазочки.

Если я запускаю софт на железяке с восемью процессорами, я ожидаю равномерную загрузку этих процессоров без необходимости полностью переписать код.

Разумеется, за это отвечает язык (точнее, среда исполнения). Если вы это называете "параллелизмом в языке", то nodejs прекрасно с этим справляется в своей типичной роли: много IO + чуть-чуть js. Все доступные процы у железки будут работать, и никакие костыли в виде воркеров или балансеров для этого не нужны. Понятно, что гигантские матрицы перемножать на js с хорошей утилизацией CPU -- это надо сильно извернуться, и, да, из однопоточной в многопоточную версию -- надо будет переписать с нуля. Для таких задач ноду вообще лучше не брать. Ну так у любой технологии есть разумные границы применимости.

nodejs прекрасно с этим справляется в своей типичной роли: много IO + чуть-чуть js

Я знаю. Но это же теплица. Я не говорю, о гигантских матрицах, пусть просто надо разгребать сообщения из брокера, по нескольку десятков тысяч в секунду.

Кроме того, я же нигде не говорил, что нода вообще непригодна к использованию. Просто меня немного …кхм удивил основной посыл: нода идеальна благодаря её однопоточному параллелизму.

Я не защищал позицию автора, а указал на неточность в комментарии, которая мешала согласиться с этим комментарием целиком.

За это — спасибо, да.

основной посыл: нода идеальна благодаря

JS это единственный язык полностью асинхронный из коробки. И это круто! Вот мой посыл. А то что он лично Вам не нравится. Ну так старые деды из века в век ворчат на всё вокруг. А мир тем временем движется вперёд)

Единственный язык, полностью асинхронный из коробки — это эрланг. Ну и эликсир теперь еще. А раньше — смолток.

JS как язык — вообще лишен примитивов параллелизации. Среда исполнения ноды — да, костылит IO (буквально shelling it out в стороннюю библиотеку). Но делает это настолько неуклюже, что нравиться это может только школьнику, который кроме ноды — ничего в жизни не видел.

Кстати, а вы в курсе вообще, что автор ноды Райан Даль в 2018 году публично заявил, что нода — говно и стал работать над ее «правильной» заменой — Deno?

Да, асинхронность это не параллелизм.

Но. Нода при работе с асинхронностью (не сравнивать с js) отдает задачи типа работы с файлами, как указал автор, на откуп libuv, что в свою очередь работает параллельно, что в свою очередь является параллелизмом.

Я вообще молчу что нода может выполнять таски на стороне c++, или это тоже не является параллелизмом и многопоточностью? Думаю хорошо написанный код на ноде (а кроме ноды есть и еще более интересные окружения для JS) даст прикурить хреновому коду на плюсах

Может быть в вашем понимании параллелизм что-то свое, более изящное и гениальное, но в ноде это работает так и называется так.

Смотрите, вот код на руби, который выполняет 8 задач параллельно:

(1..8).map { spawn('ls') }

По-взрослому параллельно, это легко проверить. Делает ли это руби языком со встроенными инструментами для работы с параллелизмом? Да нет, конечно, GIL. С питоном всё ровно точно так же. Зачем Гуглу вдруг потребовался Пайк, для работы над новым языком, когда вокруг столько готовых? — Примитивы параллелизации. ГО появился на свет не для того, чтобы поразить всех омерзительным синтаксисом и нечеловеческой обработкой ошибок. А чтобы гуглеры могли писать параллельно исполняемый код.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории