@zlodiak

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

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

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


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

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

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

Войти через центр авторизации
Похожие вопросы
27 апр. 2024, в 13:49
300000 руб./за проект
27 апр. 2024, в 13:30
30000 руб./за проект
27 апр. 2024, в 13:22
600 руб./за проект