Aru*_*Das 4 javascript jquery multithreading
由于浏览器中的 Javascript 引擎只有 1 个线程,因此当我们使用 jquery 创建 XHR 请求时,就像这样
$.ajax({
url: "http://test.com/test.html",
context: document.body
}).done(function() {
$( this ).addClass( "done" );
});
Run Code Online (Sandbox Code Playgroud)
对远程服务器的 HTTP 请求发生在哪个线程上,通知主线程请求已完成的线程是什么?
您必须记住 javascript 在浏览器中运行——浏览器本身使用多个线程和(尤其是在 Chrome 中)多个进程。
当您创建 XHR 请求(它是一个抽象)时,浏览器将在其权限级别内自行打开本地 TCP 端口,并可能在其自己的线程上运行此任务。
这就是 JS 对 IO 如此有效的原因——您可以认为让浏览器打开本地 tcp 端口,然后与远程 Web 服务器通信,类似于使用 node.js 连接和读取数据库。
浏览器可以打开多个 tcp 连接,它们可以在后台共享,但是,当响应返回时,它只能在 JS 中一次处理来自这些 XHR 请求之一(与浏览器对话的抽象)的响应事件循环。
虽然,现代 JS 中也可以使用工作程序(节点中的集群和 child.fork())等。
| 归档时间: |
|
| 查看次数: |
1602 次 |
| 最近记录: |