Комментарии 19
Весь этот параллелизм, однопоточен, а значит не будет возникать проблем с отладкой и синхронизацией, множества исполняемых потоков.
Во-первых, вы путаете параллелизм (которого в ноде нет) с асинхронностью. Вот тут неплохо расписано: https://ru.stackoverflow.com/a/416086/178362. Фраза «параллелизм однопоточен» — это оксюморон.
Во-вторых, если у вас возникают проблемы с отладкой и синхронизацией множества потоков — значит вам зачем-то потребовалось множество потоков, и решать такую задачу возвращением в один поток — все равно, что лечить перхоть усекновением главы.
В-третьих, у ноды есть свои преимущества (наверное), но выдавать за одно из них — невозможность распараллелить выполнение на все процессоры — это немного за гранью.
мне кажется
Бывает. Но я ничего не путаю.
Воркеры..... нееее не, слышал
Слышал я про воркеры, это абсолютно неработоспособный костыль в хотя бы слегка нагруженной среде. Всё горизонтальное масштабирование, на которое способна нода — это воткнуть побольше изолированных серверов за балансером.
Судя по уровню комментария
Не вам судить об уровне моего комментария.
абсолютно неработоспособный костыль
Почему же? У меня есть кейсы когда эта штука здорово помогала поднять перфоманс
Не вам судить об уровне моего комментария
Пффф больше пафоса! Того что Вы написали в комментарии достаточно понять что на JS, Вы не пишите. Но зачем-то оставляете критические замечания по технологии в которой не разбираетесь. Насколько это адекватно?
«Я за всю жизнь не снёс ни единого яйца, что никак не мешает мне судить о качестве омлета лучше любой курицы» — Бернард Шоу.
Я не пишу на JS не потому, что не умею, или не разбираюсь, а потому, что в задачах, которые приходится решать мне, — проще взять тормоз от башенного крана, чем ноду — будет и то производительнее.
Я не пишу на JS
Я это и так заметил. Ещё заметил что не особо владеете мат частью по языку, от чего пишите чушь. Зачем?
Просто трудно понять зачем оно Вам? Вот я допустим не пишу на шарпах. Но мне и голову не придёт идти в статейку по ним и кричать что какой нибудь PHP лучше. Я давно понял что язык это просто инструмент, важнее тот кто за него берётся. Дай в руки мастера кривую стамеску он и с ней сделает шедевр. Да в руки дебилу самый дорогой тул, он всё испортит, да ещё и без глаза останется
параллелизм (которого в ноде нет)
Строго говоря, в этом смысле параллелизма нет ни в одной программной среде, т.к. параллелизм — атрибут железа, а не софта. Поэтому отдельно упрекать в этом именно ноду — некорректно.
Это все равно, что утверждать, будто качество десерта — атрибут вазочки, в которой его подали. Если я запускаю софт на железяке с восемью процессорами, я ожидаю равномерную загрузку этих процессоров без необходимости полностью переписать код.
Вот за это отвечает как раз язык.
Если я запускаю софт на железяке с восемью процессорами, я ожидаю равномерную загрузку этих процессоров без необходимости полностью переписать код
Разрабы на высокоуровневых ЯПах о таком не задумываются)
Я опираюсь на то определение параллелизма, которое Вы же и привели. Там как раз про вазочки.
Если я запускаю софт на железяке с восемью процессорами, я ожидаю равномерную загрузку этих процессоров без необходимости полностью переписать код.
Разумеется, за это отвечает язык (точнее, среда исполнения). Если вы это называете "параллелизмом в языке", то nodejs прекрасно с этим справляется в своей типичной роли: много IO + чуть-чуть js. Все доступные процы у железки будут работать, и никакие костыли в виде воркеров или балансеров для этого не нужны. Понятно, что гигантские матрицы перемножать на js с хорошей утилизацией CPU -- это надо сильно извернуться, и, да, из однопоточной в многопоточную версию -- надо будет переписать с нуля. Для таких задач ноду вообще лучше не брать. Ну так у любой технологии есть разумные границы применимости.
nodejs прекрасно с этим справляется в своей типичной роли: много IO + чуть-чуть js
Я знаю. Но это же теплица. Я не говорю, о гигантских матрицах, пусть просто надо разгребать сообщения из брокера, по нескольку десятков тысяч в секунду.
Кроме того, я же нигде не говорил, что нода вообще непригодна к использованию. Просто меня немного …кхм удивил основной посыл: нода идеальна благодаря её однопоточному параллелизму.
Я не защищал позицию автора, а указал на неточность в комментарии, которая мешала согласиться с этим комментарием целиком.
основной посыл: нода идеальна благодаря
JS это единственный язык полностью асинхронный из коробки. И это круто! Вот мой посыл. А то что он лично Вам не нравится. Ну так старые деды из века в век ворчат на всё вокруг. А мир тем временем движется вперёд)
Единственный язык, полностью асинхронный из коробки — это эрланг. Ну и эликсир теперь еще. А раньше — смолток.
JS как язык — вообще лишен примитивов параллелизации. Среда исполнения ноды — да, костылит IO (буквально shelling it out в стороннюю библиотеку). Но делает это настолько неуклюже, что нравиться это может только школьнику, который кроме ноды — ничего в жизни не видел.
Да, асинхронность это не параллелизм.
Но. Нода при работе с асинхронностью (не сравнивать с js) отдает задачи типа работы с файлами, как указал автор, на откуп libuv, что в свою очередь работает параллельно, что в свою очередь является параллелизмом.
Я вообще молчу что нода может выполнять таски на стороне c++, или это тоже не является параллелизмом и многопоточностью? Думаю хорошо написанный код на ноде (а кроме ноды есть и еще более интересные окружения для JS) даст прикурить хреновому коду на плюсах
Может быть в вашем понимании параллелизм что-то свое, более изящное и гениальное, но в ноде это работает так и называется так.
Смотрите, вот код на руби, который выполняет 8 задач параллельно:
(1..8).map { spawn('ls') }
По-взрослому параллельно, это легко проверить. Делает ли это руби языком со встроенными инструментами для работы с параллелизмом? Да нет, конечно, GIL. С питоном всё ровно точно так же. Зачем Гуглу вдруг потребовался Пайк, для работы над новым языком, когда вокруг столько готовых? — Примитивы параллелизации. ГО появился на свет не для того, чтобы поразить всех омерзительным синтаксисом и нечеловеческой обработкой ошибок. А чтобы гуглеры могли писать параллельно исполняемый код.
Node.js — асинхронность по умолчанию