ajax는 멀티 쓰레드가 아니고 싱글 쓰레드입니다. 왜냐하면 JavaScript는 싱글 쓰레드이고, Ajax는 JavaScript의 범주에 속하므로 Ajax는 싱글 쓰레드이기 때문입니다. 멀티스레딩을 구현하기 위해 Ajax를 사용할 수 있는 이유는 웹 서버에 따라 다릅니다. 서버는 요청을 처리하기 위해 멀티스레딩을 사용합니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, JavaScript 버전 1.8.5, Dell G3 컴퓨터.
Ajax는 단일 스레드인가요, 아니면 다중 스레드인가요?
먼저 명확히 해 두겠습니다. Ajax는 단일 스레드입니다. 왜냐하면 JavaScript는 단일 스레드이고 Ajax는 JavaScript 범주에 속하므로 Ajax는 단일 스레드이기 때문입니다. Ajax를 사용하여 멀티스레딩을 구현할 수 있는 이유는 웹 서버가 요청을 처리하기 위해 멀티스레딩을 사용하는 이유에 따라 다릅니다.
그렇다면 확실히 해두자면 브라우저는 다중 프로세스입니다. 그림과 같이 Chrome에서 탭 페이지가 열릴 때마다 하위 프로세스가 발생합니다.
JS는 브라우저에서 실행되기 때문에 각 창에는 JS 스레드가 있으므로 특정 순간에 특정 코드만 실행될 수 있으며 다른 코드는 차단됩니다.
Ajax 비동기?
Ajax 요청은 실제로 비동기식입니다. js 엔진은 Message Queue 및 Event 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!