>웹 프론트엔드 >프런트엔드 Q&A >Ajax는 멀티스레드인가요?

Ajax는 멀티스레드인가요?

青灯夜游
青灯夜游원래의
2022-01-19 15:08:292516검색

ajax는 멀티 쓰레드가 아니고 싱글 쓰레드입니다. 왜냐하면 JavaScript는 싱글 쓰레드이고, Ajax는 JavaScript의 범주에 속하므로 Ajax는 싱글 쓰레드이기 때문입니다. 멀티스레딩을 구현하기 위해 Ajax를 사용할 수 있는 이유는 웹 서버에 따라 다릅니다. 서버는 요청을 처리하기 위해 멀티스레딩을 사용합니다.

Ajax는 멀티스레드인가요?

이 튜토리얼의 운영 환경: Windows 7 시스템, JavaScript 버전 1.8.5, Dell G3 컴퓨터.

Ajax는 단일 스레드인가요, 아니면 다중 스레드인가요?

먼저 명확히 해 두겠습니다. Ajax는 단일 스레드입니다. 왜냐하면 JavaScript는 단일 스레드이고 Ajax는 JavaScript 범주에 속하므로 Ajax는 단일 스레드이기 때문입니다. Ajax를 사용하여 멀티스레딩을 구현할 수 있는 이유는 웹 서버가 요청을 처리하기 위해 멀티스레딩을 사용하는 이유에 따라 다릅니다.

그렇다면 확실히 해두자면 브라우저는 다중 프로세스입니다. 그림과 같이 Chrome에서 탭 페이지가 열릴 때마다 하위 프로세스가 발생합니다.

JS는 브라우저에서 실행되기 때문에 각 창에는 JS 스레드가 있으므로 특정 순간에 특정 코드만 실행될 수 있으며 다른 코드는 차단됩니다.

Ajax 비동기?

Ajax 요청은 실제로 비동기식입니다. js 엔진은 Message QueueEvent Loop로 인해 기다리지 않고 비동기 코드를 실행합니다. 이 요청은 새 스레드를 열기 위해 브라우저에서 이루어집니다. 브라우저의 많은 동작은 비동기식입니다. 비동기 이벤트가 발생하면 브라우저에는 대규모 이벤트 큐를 폴링하고 이벤트를 처리하는 내부 대형 메시지 루프가 있습니다. 이전 처리가 완료되고 이벤트가 유휴 상태가 된 후 JavaScript 엔진은 항상 단일 스레드에서 콜백 함수를 실행합니다.

결론:

Ajax 요청은 실제로 비동기식입니다. 이 요청은 이벤트가 다시 호출되면 이벤트 루프 단일 스레드 이벤트 큐에 넣어 대기합니다. 처리를 위해.

비동기 작업을 등록할 때 추가한 콜백 함수는 메인 스레드가 AJAX 요청을 시작한 후 계속해서 다른 코드를 실행합니다. AJAX 스레드는 응답을 받은 후 응답을 JavaScript 개체로 캡슐화한 다음 메시지를 구성합니다.

// ajax请求
$.ajax(url, function(resp) {
    console.log('我是响应:', resp);
});
 
 
// 消息队列中的消息就长这个样子
var message = function () {
    callbackFn(response);
}
// 其中的callbackFn就是前面代码中得到成功响应时的回调函数。

메인 스레드가 현재 루프의 모든 코드 실행을 마친 후에는 다음과 같이 진행됩니다. 이 메시지 메시지를 검색하고 실행하기 위해 메시지 큐로 이동합니다. 이 시점에서 메인 스레드에 대한 작업 스레드 알림이 완료되고 콜백 함수가 실행되었습니다. 메인 스레드가 처음에 콜백 기능을 제공하지 않으면 AJAX 스레드가 HTTP 응답을 받은 후 메인 스레드에 알릴 필요가 없으며 메시지 큐에 메시지를 넣을 필요도 없습니다. 그 중 비동기 프로세스의 콜백 함수는 이벤트 루프의 현재 라운드에서 실행되어서는 안 됩니다.

【관련 튜토리얼 추천: AJAX 동영상 튜토리얼

위 내용은 Ajax는 멀티스레드인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.