Почему Node все называют однопоточным, если он многопоточный?
Сколько пишу на ноде, не понимаю, почему его называют все однопоточным.
У него есть основной поток, где происходит обработка событий, но ведь помимо основного, есть и другие.
Так же мы можем создать параллельно другие потоки.
Как правильней дискутировать и обсуждать тему многопоточности ноды в спорах?
С одной стороны странно, что многие бы ошибались в высказываниях, что он однопоточный.
Но с другой мне кажется тут не все так просто.
Какие примеры будут самыми валидными в отстаивание того, что он многопоточный?
Например тот же пхп или джава создают новый поток на каждого клиента, с другой, потоки же не заканчиваются только в рамках запросов клиентов.
JS - однопоточный язык. Читайте про event loop.
Node - всего лишь рантайм. На нем нельзя "писать".
И threads ноды - это не чистая многопоточность. В браузере тоже воркеры есть.
имеется ввиду, что код на JS всегда выполняется в одном потоке и можно не заморачиваться с синхронизацией, а вот вызовы стандартной библиотеки для ввода-вывода, например, могут выполняться в других потоках под капотом, но это как бы скрыто от нас (JS-кодеров)
И threads ноды - это не чистая многопоточность. В браузере тоже воркеры есть.
а что тогда есть "чистая многопоточность"?
насколько я знаю, браузерные воркеры - это прям настоящие потоки операционной системы. И даже есть разделяемая память в лице SharedArrayBuffer, с необходимостью синхронизировать доступ. Чего ещё не хватает для истинной многопоточности?
И да, сто раз уже говорилось многими людьми - не бывает однопоточных или многопоточных языков, бывают соответствующие среды исполнения.
И да, сто раз уже говорилось многими людьми - не бывает однопоточных или многопоточных языков, бывают соответствующие среды исполнения.
Те кто начинал с С++98, перешел на С++03 и затем на С++11 с Вами не согласятся (да и не только в в части С++). И вот вроде бы все у Вас верно написано, но как говорится есть нюанс!
а что там поменялось? Добавили какую-нибудь синтаксическую обертку для работы с потоками или разделяемой памятью?
std::mutex все перечислять не вижу смысла, но условно говоря с 11 версии язык стал более приспособлен к потокам, а написание многопоточного кода более дружелюбным. На мой взгляд под терминологию "многопоточность реализована на уровне языка" стал попадать. Это один из множества примеров.
Тут либо на уровне языка либо на уровне сторонних библиотек. Мы же все понимаем что многопоточность можно реализовать практически на любом языке, разным уровнем костылей.
JS - однопоточный, то что Вы можете запустить несколько потоков (инстансов) не делает его многопоточным.
Следуя Вашей логике Бейсик тоже будем считать многопоточным.
P.S. это не отменяет возможности использования потоков в NodeJS. Впрочем на Бейсике тоже.