Как Javascript является одним поточным, как libuv обрабатывает, когда мне удается выполнить два запроса параллельно? Например: создание массива обещаний и разрешение последнегоЧто происходит в libuv, когда вы делаете параллельные запросы
ответ
Я предполагаю, что вы действительно задаетесь вопросом, как libv8 обрабатывает два асинхронных запроса, которые одновременно находятся в полете. Поскольку Javascript - единственный поток, вы не можете запускать их в тот же момент. Один из них будет запущен, тогда ваш JS сможет запустить еще и запустить второй. Они оба будут «в процессе» одновременно.
Во-первых, библиотека, используемая в nodejs, обычно называется libuv, а не libv8. Вот the doc for libuv.
Ответ на вопрос о том, как это делает libuv, зависит от типа асинхронной операции. Вот диаграмма с libuv site:
Disk I/O в libuv использует собственные потоки с помощью пула потоков. Собственный поток запускает операцию ввода-вывода каждого диска, а затем завершает его, затем помещает событие в очередь событий nodejs, так что, когда nodejs доступен, он может вытащить это событие из очереди событий и вызвать обратный вызов, зарегистрированный для async I/O. Эта функциональность изначально была получена от libeio, но, по-видимому, теперь является ее собственной реализацией.
Сетевые операции в libuv используют собственные ОС async, такие как epoll, kqueue и IOCP.
Спасибо, я сделал. да, я новичок в платформе –
технически вы не делаете запрос параллельным, на первом приходит. сначала начинается, но он прослушивает или проверяет один, если он закончен, а затем другой, и назад и вперед, пока один не заканчивается первым.
Спасибо за ваши ans @Johnathan Ralls, я ожидал того же самого, он берет один за другим. но я слышал от одного парня, когда он рассказывал что-то с икру. В то время я не совсем понял. –
Они также асинхронны на уровне ОС. Лучше говорить о * параллельных * запросах здесь, а не о «параллельных». – Bergi
Спасибо @Bergi за правильное размещение –