>웹 프론트엔드 >JS 튜토리얼 >JS의 비동기 실행에 대한 간략한 소개

JS의 비동기 실행에 대한 간략한 소개

怪我咯
怪我咯원래의
2017-07-07 14:57:521106검색

아래 편집기에서는 js의 비동기 실행에 대해 간략하게 설명합니다. 편집자님이 꽤 좋다고 생각하셔서 지금 공유하고 모두에게 참고용으로 드리고자 합니다. 편집기를 따라 살펴보겠습니다

1.Javascript언어의 실행 환경은 "단일 스레드"입니다.

장점: 구현이 비교적 간단하고 실행 환경도 비교적 간단합니다.

단점 : 하나의 작업에 시간이 오래 걸리는 만큼 후속 작업도 대기열에 넣어야 하므로 전체 프로그램의 실행이 지연됩니다. 일반적인 브라우저 무응답(일시 중단)은 장시간 실행되는 특정 Javascript 코드 조각(예: 무한 루프)으로 인해 발생하는 경우가 많습니다. 이로 인해 전체 페이지가 이 위치에 멈춰 다른 작업을 수행할 수 없게 됩니다.

이 문제를 해결하기 위해 Javascript 언어는 작업 실행 모드를 동기(Synchronous)와 비동기(Asynchronous)의 두 가지 유형으로 나눕니다.

2. "비동기 모드" 프로그래밍의 여러 방법:

(1) 콜백 함수: 장점은 간단하고 이해하기 쉽고 배포하기 쉽다는 점입니다. 코드를 읽고 유지하는 데 도움이 되지 않습니다. 다양한 부분이 결합(Coupling)되어 프로그램 구조가 혼란스럽고 프로세스를 추적하기 어렵습니다(특히 콜백 함수가 중첩된 경우). 각 작업.

(2) 이벤트 중심 모드 채택(이벤트 모니터링): 장점은 비교적 이해하기 쉽고, 여러 이벤트를 바인딩할 수 있고, 각 이벤트가 여러 콜백 함수를 지정할 수 있으며 "분리"될 수 있다는 것입니다( 디커플링) 모듈화를 달성하는 데 도움이 됩니다. 단점은 전체 프로그램이 이벤트 중심으로 이루어져야 하고 실행 프로세스가 매우 불분명해진다는 것입니다.

(3) 관찰자 패턴 (publish-subscribe 패턴): 이 방법의 특성은 "이벤트 청취"와 유사하지만 후자보다 훨씬 낫습니다. "메시지 센터"를 보고 프로그램 운영을 모니터링하여 신호 수와 각 신호의 구독자 수를 확인할 수 있기 때문입니다.

3. 비동기 작업을 위한 프로세스 제어.

(1) 직렬 실행: 프로세스 제어 함수를 작성하고 한 작업이 완료된 후 다른 작업이 실행됩니다.

var items = [ 1, 2, 3, 4, 5, 6 ];
var results = [];
function series(item) {
 if(item) {
  async( item, function(result) {
   results.push(result);
   return series(items.shift());
  });
 } else {
  return final(results);
 }
}
series(items.shift());

Function 시리즈는 비동기 작업을 순차적으로 실행하는 함수입니다. 모든 작업이 완료될 때까지 최종 함수가 실행되지 않습니다. items 배열은 각 비동기 작업의 매개변수를 저장하고, results 배열은 각 비동기 작업의 실행 결과를 저장합니다.

(2) 병렬 실행: 모든 비동기 작업이 동시에 실행되며 모두 완료될 때까지 최종 기능이 실행되지 않습니다.

//forEach方法会同时发起6个异步任务,等到它们全部完成以后,才会执行final函数。
var items = [ 1, 2, 3, 4, 5, 6 ];
var results = [];

items.forEach(function(item) {
 async(item, function(result){
  results.push(result);
  if(results.length == items.length) {
   final(results);
  }
 })
});

병렬 실행의 장점은 한 번에 하나의 작업만 실행할 수 있는 직렬 실행에 비해 시간이 절약된다는 것입니다. 하지만 문제는 병렬 작업이 많으면 시스템 자원이 고갈되기 쉽고 작업 속도도 느려진다는 점이다. 따라서 세 번째 공정 제어 방법이 있습니다.

(3) 병렬과 직렬의 조합: 임계값을 설정하면 한 번에 n개의 비동기 작업만 병렬로 실행할 수 있습니다. 이렇게 하면 시스템 리소스가 과도하게 사용되는 것을 방지할 수 있습니다.

아아아아

위 내용은 JS의 비동기 실행에 대한 간략한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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