2016-06-05 3 views
0

Как Javascript является одним поточным, как libuv обрабатывает, когда мне удается выполнить два запроса параллельно? Например: создание массива обещаний и разрешение последнегоЧто происходит в libuv, когда вы делаете параллельные запросы

+0

Они также асинхронны на уровне ОС. Лучше говорить о * параллельных * запросах здесь, а не о «параллельных». – Bergi

+0

Спасибо @Bergi за правильное размещение –

ответ

1

Я предполагаю, что вы действительно задаетесь вопросом, как libv8 обрабатывает два асинхронных запроса, которые одновременно находятся в полете. Поскольку Javascript - единственный поток, вы не можете запускать их в тот же момент. Один из них будет запущен, тогда ваш JS сможет запустить еще и запустить второй. Они оба будут «в процессе» одновременно.

Во-первых, библиотека, используемая в nodejs, обычно называется libuv, а не libv8. Вот the doc for libuv.

Ответ на вопрос о том, как это делает libuv, зависит от типа асинхронной операции. Вот диаграмма с libuv site:

enter image description here

Disk I/O в libuv использует собственные потоки с помощью пула потоков. Собственный поток запускает операцию ввода-вывода каждого диска, а затем завершает его, затем помещает событие в очередь событий nodejs, так что, когда nodejs доступен, он может вытащить это событие из очереди событий и вызвать обратный вызов, зарегистрированный для async I/O. Эта функциональность изначально была получена от libeio, но, по-видимому, теперь является ее собственной реализацией.

Сетевые операции в libuv используют собственные ОС async, такие как epoll, kqueue и IOCP.

+0

Спасибо, я сделал. да, я новичок в платформе –

1

технически вы не делаете запрос параллельным, на первом приходит. сначала начинается, но он прослушивает или проверяет один, если он закончен, а затем другой, и назад и вперед, пока один не заканчивается первым.

+0

Спасибо за ваши ans @Johnathan Ralls, я ожидал того же самого, он берет один за другим. но я слышал от одного парня, когда он рассказывал что-то с икру. В то время я не совсем понял. –