setTimeout против WebWorker против XMLHttpRequest - PullRequest
2 голосов
/ 30 апреля 2020

Мне нужно понять эти понятия более четко, так как я не уверен в них. Javascript пока что однопоточный, так хорошо.

  1. Насколько я понимаю, setTimeout просто задерживает выполнение кода из основного потока, но обратный вызов все равно выполняется в основной поток, когда стек вызовов пуст. Это правильно? То же самое будет верно для Обещаний и Обработчиков событий.

    setTimeout(() => {
    console.log('this line of code is executed on the main thread');
    }, 5000);
    
  2. Для асинхронных запросов, использующих XMLHttpRequest , фактический запрос отправляется в отдельный API, реализованный браузером, который запускает его в отдельном потоке, поэтому он действительно асинхронный. Это правильно?

  3. WebWorkers будет другим API, реализованным браузером, который также запускает код из данного сценария в фоновом потоке. Это правильно?

Буду очень признателен за ответ на этот вопрос!

1 Ответ

1 голос
/ 30 апреля 2020

Вы в целом правы во всех трех точках.

  1. Установите время ожидания и любые другие асинхронные функции ставятся в очередь для выполнения после выполнения предварительного условия. Итак, когда стек вызовов пуст и есть работа, которую нужно выполнить, JS выбирает следующую функцию из очереди и выполняет ее. Это обрабатывается так называемой javascript очередью событий.
  2. Практических отличий от setTimeout нет. Обе функции будут ставить ваш обратный вызов в очередь после завершения, код, отвечающий за это, определяется реализацией, поэтому браузеры могут выбирать, как они это делают, если речь идет о многопоточности.
  3. Да, работник работает в другом потоке и имеет свое собственное событие. л oop. Если он отправляет сообщение в основной поток, обратный вызов для этого сообщения ставится в очередь для запуска в главном потоке с этим сообщением и наоборот. Обратите внимание, что, насколько мне известно, веб-браузеры не обязаны иметь по одному потоку на одного работника, но это не должно влиять на вас.
...