Все потоки
Поиск
Написать публикацию
Обновить

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

Все эти прекрасные абзацы текста — ради констатации "Жаваскрипт не тормозит!"?

Скорее пояснение почему он тормозит и где конкретно, а также чем это вызвано. Конечно же в контексте работы пакетных менеджеров

Так он и не тормозит, тормозят программисты, которые пишут на нем тормозящие программы.

Node.js понял, что event loop JavaScript (изначально разработанный для событий браузера) идеально подходит для серверного I/O. Когда код делает асинхронный запрос, ввод-вывод происходит в фоновом режиме, в то время как основной поток немедленно переходит к следующей задаче


Часто слышу этот довод от Node.js и Go программеров, но реальный пример из жизни никто не смог привести. Пример бэкенд API сервиса, который использует асинхронные запросы к БД чтобы что-то в это время еще поделать.

К БД обращаться незачем, есть примеры попроще. Например, nginx с aio.

Фраза "основной поток немедленно переходит к следующей задаче" вообще не означает "следующая задача в выполняемой функции". Это может быть задача http сервера "работай над следующим клиентским запросом пока".

Хотя если интересно, могу и такой вариант предложить. Бэкэнду надо собрать и вернуть некий html. Кусочки которого, а также различные стили и картинки, разбросаны по куче локаций: файлы, архивы, URL-ы. Например, для простоты, мне нужно прочитать только файлы А и Б.
И тут выбор - либо вы по очереди делаете синхронное чтение из А,потом из Б. Либо запрашиваете байты асинхронно из А, потом асинхронно из Б и ждете конца всех вызовов сразу. Вот это "потом асинхронно из Б" и есть та самая  "следующая задача, к которой немедленно переходит основной поток".

Искусственные примеры придумать можно
Я просил реальные


Бэкенд API запрос в абсолютном большинстве случаев - синхронная операция
А в остальных она решается другими механизмами (очереди сообщений и т.п.), а не js асинхронщиной

Если на ваш api бэкэнд приходят два запроса одновременно, вы их последовательно обрабатывать будете?

Я буду применять языки, в которых такие вопросы просто не возникают
Например, PHP или Java

Что значит "не возникает" и причем тут языки? Механизм обработки конкурентных запросов определяется конкретной библиотекой. В той же java есть Spring MVC с пуллом потоков и блокирующим стеком, при котором возникает именно та проблема, о которой пишет автор статьи - падение производительности в high load за счет потерь на Ι/Ο и есть WebFlux, который использует эвент луп, так же как нода.

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

Вы о реализации веб сервера

Причем тут бизнес логика, если вы буквально цитируете кусок текста, описывающий как технически происходит обработка асинхронных запросов и спрашиваете зачем это нужно? Использование async/await паттерна или грин-тредов в Go как раз позволяют структурно описывать программу синхронно в последовательности действий Ι/Ο, при том что среда исполнения делает обработку Ι/Ο асинхронной.

У меня и для ноды вопросы не возникают. Да и вопрос ваш не очень понятен, если честно.

Это и были реальные примеры.

Бэкенд API запрос в абсолютном большинстве случаев - синхронная операция

Ну так вот и получается, что в (100% - "абсолютное большинство") случаев бэкенд-запросы - асинхронные операции.

Ох уж эти мак-фэн-бои. Наверняка в ядре линукса уже давно существовали эти оптимизации, не говоря уже про разные файловые системы.

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

Публикации