Комментарии 46
Весь этот параллелизм, однопоточен, а значит не будет возникать проблем с отладкой и синхронизацией, множества исполняемых потоков.
Во-первых, вы путаете параллелизм (которого в ноде нет) с асинхронностью. Вот тут неплохо расписано: 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 в стороннюю библиотеку). Но делает это настолько неуклюже, что нравиться это может только школьнику, который кроме ноды — ничего в жизни не видел.
Это как за это может отвечать язык ? То, что исполняется - это среда исполнения и она от языка может зависеть никак
Нода — это среда, а не язык. Я оговорился в комментарии выше, что должно быть понятно из контекста, в принципе.
Но и язык должен быть, как минимум, готов: примитивы параллелизации хотя бы должны быть.
примитивы параллелизации хотя бы должны быть
Ну во первых в ноде это есть, а то что Вы не в курсе это скорее проблема Вашей недалёкости в теме.
А во вторых, зачем? Есть кача языков без поддержки многопоточки (то что Вы от безграмотности называете параллелизмом). На вскидку так большая часть интернета написана на пыхе, где нет ни асинхронки, ни многопоточки. И ничего Интернет отлично себя чувствует. Язык это лишь инструмент, который решает определённые задачи и вот прикиньте возможность работать с тредами, это не самая важная часть даже тех языков, где это есть.
Во-первых, когда я горшок брал — трещина на нем уже была. Во-вторых, когда я его возвращал, никакой трещины не было. И, наконец, я не брал никакого горшка.
Ладно, я вообще зря влез, живите в своем мире, где параллелизм не нужен, его примитивы есть в ноде, а интернету в 2025 году нужно обрабатывать только такие объемы данных, с которыми справится один поток.
Удачи, чё.
где параллелизм не нужен
А я где-то говорил что многопоточка не нужна? Ей богу я словно с тинейджером общаюсь у которого мир делится только на чёрное и белое. Я имел ввиду что далеко не все на ней зациклено, как у вас в голове. Она решает определенный достаточно узкий пул задач, с которыми множество проектов даже не столкнется за свой жизненный цикл. И туже джаву ценят вовсе не за эту фичу, а за кое что другое
Да, асинхронность это не параллелизм.
Но. Нода при работе с асинхронностью (не сравнивать с js) отдает задачи типа работы с файлами, как указал автор, на откуп libuv, что в свою очередь работает параллельно, что в свою очередь является параллелизмом.
Я вообще молчу что нода может выполнять таски на стороне c++, или это тоже не является параллелизмом и многопоточностью? Думаю хорошо написанный код на ноде (а кроме ноды есть и еще более интересные окружения для JS) даст прикурить хреновому коду на плюсах
Может быть в вашем понимании параллелизм что-то свое, более изящное и гениальное, но в ноде это работает так и называется так.
Смотрите, вот код на руби, который выполняет 8 задач параллельно:
(1..8).map { spawn('ls') }
По-взрослому параллельно, это легко проверить. Делает ли это руби языком со встроенными инструментами для работы с параллелизмом? Да нет, конечно, GIL. С питоном всё ровно точно так же. Зачем Гуглу вдруг потребовался Пайк, для работы над новым языком, когда вокруг столько готовых? — Примитивы параллелизации. ГО появился на свет не для того, чтобы поразить всех омерзительным синтаксисом и нечеловеческой обработкой ошибок. А чтобы гуглеры могли писать параллельно исполняемый код.
Каждый новый язык появляется с какой-то причиной. Не всегда адекватной, а бывает и натянутой.
Первый тейк был про ноду и ее параллелизм. Он есть? Есть
Второй тейк был про то что можно писать на ноде код, по скорости не хуже чем другие языки, но если это захотеть и если для этого есть причина. Если мне не нужна скорость, зачем мне за ней гнаться?
Если вам нужен будет бэкенд для фронта, на чем будете писать: си или нода? Я выберу ноду. А что если потом нужно будет решать задачи выносом в отдельный поток? Просто берем инструменты и решаем проблему, а не меняем язык 🙃
Вообщем споры о разности языка в скорости это конечно хорошо, но в нашем случае не лучше спора Боба с Муратори.
про ноду и ее параллелизм. Он есть? Есть
Кому и кобыла — невеста. Еще раз: shelling out IO-bound tasks — это не параллелизм. Простой пример, чтобы вам было понятнее: попробуйте написать код, который на восьмиядерной машине будет зачитывать и преобразовывать гигабайтный CSV в JSON — в восемь раз быстрее, чем на одноядерной. Если получится — я тут же в своём профиле тут напишу: «Я — иплан, который ничего не понимает в ноде».
на чем будете писать: си или нода?
Жесткий выбор. В американском английском есть такой фразеологизм: «Head or gut?» — когда твой друг переспал с твоей женой, и ты хочешь его немножечко отметелить. Мой выбор такой: 1. эликсир, 2. руби, 3. го, 4. F#, 5. похапе, 6. джава, 7. .NET, 8. хаскель, 9. нода, 10. си (и это я еще недостаточно хорошо владею кложей, а то бы она вытеснила из первой пятерки похапе.
споры о разности языка в скорости
Заметьте, я нигде ничего не говорил о скорости. Скорость вы вообще сами придумали и ожесточенно разбиваете собственный тезис в пух и прах. Поищите по странице: до вас скорость вообще никто не упоминал.
Мой выбор такой: 1. эликсир, 2. руби, 3. го, 4. F#, 5. похапе, 6. джава, 7. .NET, 8. хаскель, 9. нода, 10. си
Удачи Вам с поиском команды на руби и эфшарп,а этот момент ой как важен если мы играем по взрослому
Ну и как бы, в топе языков для бэкенда нет питончика, за-то есть си...... К - компетентность!
Что не так с руби? В мой почтовый ящик буквально сыпятся предложения (возможно, из-за коммитов в рельсы и своих библиотек), но мне руби немного приелся из-за своих граблей.
F# — действительно не слишком популярен, из-за высокого порога входа, но команду я найду хоть завтра.
в топе языков для бэкенда нет питончика
Я не выберу питон, даже если альтернативой — будет кобол в инвалидном кресле или ассемблер. Это мой список, он не претендует на объективность. Я уже могу себе позволить выбирать те языки, которые мне нравятся.
Что не так с руби?
Нуу я ещё в универе учился его нарекали убийцей пыхи. По итогу он сам издох практически, изрядно просев в популярности к концу 10-х. Хотя наверное не всё так плохо и думаю он жив ещё и человеки под него найдутся
о команду я найду хоть завтра
Ну может и найдёте, хотя такая скорость сомнительна. Ещё важен вопрос цены старта и дальнейшей поддержки. Пока Вы будите искать дрим тим, под свой любимый язык, менее душные ребяты возьмут какой нибудь пайтон, запилят за пару недель, мвипишку и залутают весь жир себе.
ребяты возьмут какой нибудь пайтон, запилят за пару недель, мвипишку и залутают весь жир себе
Не смею мешать, только порадуюсь за них.
Не смею мешать, только порадуюсь за них
К сожалению Ваши инвесторы вряд-ли разделят такой оптимизм. Я это к тому что бывают и коммерческие факторы влияющие на выбор стека и они зачастую влияют куда сильнее чем мнение отдельных душнил гонящихся за перфомансом ради перфоманса
Мне насрать на мнение инвесторов. Их гораздо больше, чем хороших продуктов.
Я не голодаю и не побираюсь, чтобы выкатить как можно быстрее какое-нибудь говно и заработать три копейки. Такие вопросы с инвесторами обговариваются на берегу, и мне не раз доводилось успешно объяснять, почему некоторые аспекты выбора технологии важны прямо сейчас.
Кроме того, к инвесторам ходят с готовым MVP, сейчас не 1999 год.
Чем вам кластеры в ноде не устроили? Закрывают проблему многопоточности?
Мы же изначально об этом начали общаться. Ваша мысль в том, что закидывать «параллелизм» на одно ядро глупо, правильно? Я с эти согласен
Далее, ваша мысль в том, что нода не может распараллелиь на несколько ядер?
невозможность распараллелить выполнение на все процессоры
На сколько мне известно, может, называется Clusters или второй вариант Worker threads.
Первый разбивает задачи ноды по ядрам, второй распараллеливает потоки в рамках одной ноды.
По поводу скорости, для примера я привел си, мы с вами последние два комментария начали это обсуждать. Я вам пытаюсь сказать что хреновый код на руби, это просто хреновый код, отдельный вопрос будет ли он лучше хорошего кода на ноде, не уверен.
ИМХО: тема супер интересная, но ни у вас ни у остальных комментаторов (включая меня), нет такого обширного опыта по ноде и сравнению ее с другими языками. Нужно звать Шемчединова 😂
Поэтому предлагаю закругляться
ОМГ как своевременно! Наконец то все узнают что нода асинхронна!
Много грамматических ошибок, короткая статья ни-о-чем. Типичный современный Хабр. О, времена...
Node.js — асинхронность по умолчанию