@zlodiak

Выполняет ли браузер запросы параллельно?

Есть две асинхронных функции:
task10() - получает список логинов пользователей для хабра за 10 секунд,
task2() - получает список логинов пользователей для гитхаба зы 2 секунды.

Поток выполнения программы доходит до task10 через 1 секунду после старта скрипта, до task2 - через 3 секунды. В результате эвент луп помещает их в некоторое временное "web_api_Хранилище" в таком порядке:
task10,
task2


Однако помещает их в очередь асинхронных событий(callback queue) в таком порядке:
task2,
task10

Скажите пожалуйста, правильно ли я понимаю, что несмотря на то, что javascript язык однопоточный, "web_api_Хранилище" выполняет оба запроса на получение списков логинов одновременно и параллельно? И это связано с тем, что сам браузер не одопоточный и способен обработать таски одновременно.
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ответы на вопрос 1
john36allTa
@john36allTa
alien glow of a dirty mind
Тут нужно изучать логику работы V8
Насколько я помню и понял(особо не втягиваясь читал как то статью), ложит он их в очередь исполнения на стеке и забывает, далее другой интерфейс (грубо на картинке у Вас выделен Web Apis) браузера получает данные(или когда таймер например сработал) и ложит коллбэк с данными в Event Loop, когда подойдёт его очередь(first in first out) - он запускается. Можно синхронизировать процесс с использованием await, но на async стек не повлияет все равно..
Есть ещё ограничение на одновременное подключение к домену (если мне память не изменяет то их 6 в хромиуме), активных сокет соединений
Сам браузер работает в multithread это в любом случае
Вот с этим хотя бы полезно ознакомиться, чтобы понять почему таймеры могут немного задерживаться.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы