>웹 프론트엔드 >프런트엔드 Q&A >노드 동기화와 비동기성의 차이점은 무엇입니까?

노드 동기화와 비동기성의 차이점은 무엇입니까?

WBOY
WBOY원래의
2022-04-19 17:25:473050검색

노드 동기화와 비동기식의 차이점은 다음과 같습니다. 동기화는 프로그램이 위에서 아래로 실행되고 다음 단계는 이전 단계가 실행된 후에만 실행될 수 있음을 의미합니다. 비동기식은 위의 단계가 실행될 때까지 기다릴 필요가 없음을 의미합니다. 다음 작업을 실행하기 전에 실행을 완료하세요. 비동기 프로그래밍 콜백에 의존하여 구현할 수 있지만 콜백 이후의 프로그램이 비동기라는 의미는 아닙니다.

노드 동기화와 비동기성의 차이점은 무엇입니까?

이 튜토리얼의 운영 환경: windows10 시스템, nodejs 버전 12.19.0, Dell G3 컴퓨터.

동기식 노드와 비동기식 노드의 차이점은 무엇인가요?

동기화는 프로그램이 위에서 아래로 실행되는 것을 의미하고, 비동기식은 다음 작업을 실행하기 전에 위의 실행이 완료될 때까지 기다릴 필요가 없음을 의미합니다. 비동기 프로그래밍은 콜백에 의존하지만, 콜백을 사용한 후에 프로그램이 비동기화된다고 말할 수는 없습니다.

Synchronization 영어: sync(동기화)

Asynchronous 영어: async(비동기)

Synchronization API: 현재 API 실행이 완료된 후에만 다음 API를 계속 실행할 수 있습니다.

console.log('before'); 
console.log('after');

Asynchronous API: 현재 API 실행 시 후속 코드 실행이 차단되지 않습니다

console.log('before');
setTimeout(
   () => { console.log('last');
}, 2000);
console.log('after');

동기 API와 비동기 API의 차이점(반환 값 가져오기)

동기 API는 반환 값에서 API 실행 결과를 가져올 수 있으며, (비동기 API에서는 return을 써도 결과가 나오지 않는 것 같은데요?)

// 异步
  function getMsg () { 
      setTimeout(function () { 
          return { msg: 'Hello Node.js' }
      }, 2000);
  }
  const msg = getMsg (); //函数没有写return 默认是返回 undefined
cnsole.log(msg); // 输出的是 undefined,因为定时器还没执行完就执行了输出

Callback 함수

직접 함수를 정의하고 다른 사람이 호출하게 하세요.

// getData函数定义
 function getData (callback) {}
  // getData函数调用
 getData (() => {});
/*例子------------------*/
function getMsg (callback) {
    setTimeout(function () {
        callback ({ msg: 'Hello Node.js' })
    }, 2000);
}
getMsg (function (msg) { 
    console.log(msg);
});

동기 API와 비동기 API의 차이점(코드 실행 순서)

동기 API는 위에서 아래로 순서대로 실행됩니다. 이전 코드는 다음 코드의 실행을 차단합니다.

비동기 API는 그렇지 않습니다. API 실행이 완료될 때까지 기다렸다가 다운하세요. 실행 코드

코드 실행 순서 분석

JavaScript는 동기 코드 실행 영역과 비동기 코드 실행 영역으로 구분되며, 이들 사이에는 콜백 함수 대기열 연결이 있습니다. 먼저 자바스크립트는 동기 코드 영역의 내용을 모두 실행한 후, 비동기 코드 영역으로 이동하여 코드를 실행하고, 비동기 코드 영역에서 실행된 코드 블록을 찾아 해당하는 콜백 함수를 즉시 찾습니다. 비동기 코드 블록을 동기 코드 실행 영역에 배치합니다.

Node.js

파일 읽기 API에서 비동기 API를 실행하려면 콜백 함수가 있습니다.

이벤트 수신 API에는 콜백 함수도 있습니다. (이벤트 처리 함수는 콜백 함수이고, 이벤트 리스닝 API는 비동기 API입니다.)

비동기 API 뒤의 코드 실행은 현재 비동기 API의 실행 결과에 따라 달라지지만 실제로는 비동기 API가 후속 코드 실행 시 결과가 반환되지 않습니다. 이 문제를 해결하는 방법은 무엇입니까?

예를 들어 요구 사항이 있습니다. A 파일, B 파일, C 파일을 순서대로 읽습니다(A, B, C 순으로 동시에 읽을 수 없음).

위 요구 사항이 실현되면 B를 읽는 동작으로 이어지며 A의 콜백 함수에 C를 읽는 동작이 B의 콜백 함수에 들어가게 되어 중첩 수준이 많아집니다(콜백 지옥)

const fs = require('fs');
fs.readFile('./1.txt', 'utf8', (err, result1) => {
console.log(result1)
fs.readFile('./2.txt', 'utf8', (err, result2) => {
console.log(result2)
fs.readFile('./3.txt', 'utf8', (err, result3) => {
console.log(result3)
})
})
});

추천 학습: "nodejs 영상 튜토리얼"

위 내용은 노드 동기화와 비동기성의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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