Использует ли JS Неблокирующий ввод / вывод на уровне ОС для поддержки AJAX? - PullRequest
3 голосов
/ 03 апреля 2012

Если Javascript является однопоточным процессом и AJAX является асинхронным, то как это происходит?Таким образом, на уровне ОС движок JS не выполняет неблокирующий вызов ввода-вывода для Ajax?

1 Ответ

2 голосов
/ 03 апреля 2012

Да, механизм браузера выполняет неблокирующий вызов ввода-вывода для Ajax (когда вы делаете неблокирующий вызов ajax).

Существует множество способов, которыми браузер может реализоватьСеть AJAX.Единственное, что мы точно знаем, это то, что запрос ввода-вывода ajax не блокирует поток javascript.Кроме того, каждый браузер может реализовать его по-своему, если он не блокирует поток выполнения JS и любые другие потоки, необходимые для поддержания работы браузера во время вызова ajax.

Под крышками внутрибраузер, это может быть использование отдельного потока ОС для запуска вызова ajax блокирующим способом в этом потоке, это может быть использование неблокирующего ввода / вывода в отдельном потоке, это может быть использование неблокирующего ввода / вывода вПоток интерпретатора JavaScript (вероятно, маловероятный, но возможный).Возможно даже использование отдельного процесса для управления сетевыми операциями с IPC для связи между ними.То, что он выбирает, полностью зависит от реализации браузера, так как любой из этих методов позволит интерпретатору javascript продолжать работать, пока работа с сетью ajax происходит асинхронно.Также возможно, что разные браузеры имеют несколько разные реализации.

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

...