JavaScript: Создает ли функция asyn c новый поток? - PullRequest
0 голосов
/ 10 апреля 2020

Документация Mozilla для XMLHttpRequest включает в себя следующее по параметру async:

Примечание: синхронные запросы в главном потоке могут легко нарушить работу пользователя и их следует избегать; на самом деле, многие браузеры полностью отказались от поддержки синхронной XHR в главном потоке.

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

Если я создам async функцию, которая включает в себя usng XMLHttpRequest, будет ли это квалифицироваться как новый поток?

Я знаю о fetch(), я знаю об обещаниях и знаю о используя XMLHttpRequest с обратными вызовами. Этот вопрос касается ключевого слова async.

1 Ответ

0 голосов
/ 10 апреля 2020

JavaScript (в браузере) полностью однопоточный (за исключением WebWorkers). Термин «асинхронный» не обязательно имеет отношение к многопоточности.

Скорее всего, выборка по сети происходит в «сетевом» потоке браузера на высокопроизводительном языке (c ++, rust, et c). ., но это ничего не значит для JavaScript.

Что означает синхронно в терминах JavaScript, так это то, что код c ++, который обрабатывает фактический сетевой запрос, будет приостанавливать событие JavaScript l oop до тех пор, пока Запрос завершен. Это означает, что абсолютно ничего не может произойти в контексте JavaScript до завершения запроса.

Следовательно, asyn c означает, что вы можете делать другие вещи в одном потоке JavaScript, пока сетевое извлечение происходит в фоновом режиме , Этому способствует c ++, вызывающий JavaScript callback или разрешающий JavaScript Promise (он же async / await).

Я попытаюсь прояснить ситуацию в псевдокоде:

const response = makeRequest({ asyncMode: false });
//nothing can happen until this request finishes
//requestAnimationFrame animation code or click event listeners will not run
// until the request is finished
makeRequest({ asyncMode: true, callback: function(response, error){ console.log("this will execute later once the network request is made") } });
console.log("this code will run right away");
//requestAnimationFrame animation code or click event listeners will run as normal
//  during the request
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...