ajax is not multi-threaded, but single-threaded, because JavaScript is single-threaded, and Ajax belongs to the JavaScript category, so Ajax is single-threaded. The reason why Ajax can be used to achieve multi-threading depends on the web server. The server uses multi-threading to process requests.
The operating environment of this tutorial: Windows 7 system, JavaScript version 1.8.5, Dell G3 computer.
Is Ajax single-threaded or multi-threaded?
First of all, let’s be clear: Ajax is single-threaded, because JavaScript is single-threaded, and Ajax belongs to the category of JavaScript, so Ajax is single-threaded. The reason why we can use Ajax to achieve multi-threading depends on the web server. The server uses multi-threading to process requests.
Then let’s be clear: the browser is multi-process. As shown in the figure, every time a tab page is opened in Google Chrome, there will be a child process.
Because JS runs in the browser, it is single-threaded. Each window has a JS thread. Since it is single-threaded, there is only a specific thread at a specific moment. Code can be executed and block other code.
Ajax asynchronous?
Ajax requests are indeed asynchronous. The js engine executes asynchronous code without waiting. This is because there are message queue and event loop. This request It is requested by the browser to open a new thread. Many behaviors in the browser are asynchronous. When an asynchronous event occurs, it enters the event queue. The browser has an internal large message loop, the Event Loop, which polls the large event queue and processes the event. This event will only be executed after the previous processing is completed and the event is idle, and the JavaScript engine always runs the callback function in a single thread.
Conclusion:
The Ajax request is indeed asynchronous. This request is made by the browser to open a new thread request. When the event is called back, it is put into the Event loop single thread. Event queue waiting to be processed.
The message queue contains the callback function we added when registering the asynchronous task. After the main thread initiates the AJAX request, it will continue to execute other code. The AJAX thread is responsible for requesting the URL. After getting the response, it will encapsulate the response into a JavaScript object, and then construct a message:
// ajax请求 $.ajax(url, function(resp) { console.log('我是响应:', resp); }); // 消息队列中的消息就长这个样子 var message = function () { callbackFn(response); } // 其中的callbackFn就是前面代码中得到成功响应时的回调函数。
After the main thread executes all the code in the current loop, it will receive the message The queue takes out this message and executes it. At this point, the notification of the worker thread to the main thread is completed, and the callback function is executed. If the main thread does not provide a callback function at the beginning, there is no need for the AJAX thread to notify the main thread after receiving the HTTP response, and there is no need to put messages in the message queue. Among them, the callback function of the asynchronous process must not be executed in the current round of event loop.
[Related tutorial recommendations: AJAX video tutorial]
The above is the detailed content of Is ajax multi-threaded?. For more information, please follow other related articles on the PHP Chinese website!