在哪个线程上处理和执行AJAX请求等异步请求

On which thread are asynchronous requests like AJAX request occur processed and executed

本文关键字:请求 AJAX 执行 异步 处理 线程      更新时间:2023-09-26

由于浏览器中的Javascript引擎只有1个线程,当我们使用jquery创建XHR请求时,像这样

$.ajax({
  url: "http://test.com/test.html",
  context: document.body
}).done(function() {
  $( this ).addClass( "done" );
});

对远程服务器的HTTP请求发生在哪个线程上,哪个线程通知主线程请求完成?

你必须记住javascript是在浏览器中运行的——浏览器本身使用多个线程和多个进程(特别是在Chrome中)

当您创建一个XHR请求(这是一个抽象)时,浏览器将在其权限级别内打开一个本地TCP端口,并可能在自己的线程上运行此任务。

这就是为什么JS对IO工作得这么好——你可以考虑让浏览器打开一个本地tcp端口,然后与远程web服务器通信,就像用node.js连接和读取数据库一样。

浏览器可以打开多个tcp连接,它们可以在底层共享,但是,当响应返回时,它只能在JS事件循环中一次处理来自这些XHR请求(与浏览器对话的抽象)之一的响应。

虽然,worker (clustering和node中的child.fork())等在现代JS中也是可用的

首先,当浏览器加载JavaScript文件时,然后将$。Ajax将被执行。有两种不同的XHR方式。首先设置async:false,然后后一个脚本将在XHR之后执行。否则如果我们设置async:true。然后发送XHR,但将在服务器响应到达时进行处理。