[NODEJS] 동기 및 비동기 프로그래밍의 차이 (Node.js를 단위) 란
NODEJS동기 및 비동기 프로그래밍의 차이 (Node.js를 단위) 란
해결법
-
1.차이점은 첫 번째 예에서, 프로그램은 제 라인 차단한다는 것이다. 다음 라인 (CONSOLE.LOG)는 기다려야 할 것이다.
차이점은 첫 번째 예에서, 프로그램은 제 라인 차단한다는 것이다. 다음 라인 (CONSOLE.LOG)는 기다려야 할 것이다.
질의가 처리되는 동안 두 번째 예에서, CONSOLE.LOG 실행한다. 즉, 쿼리는 프로그램이 다른 일을하는 동안, 백그라운드에서 처리되며, 쿼리 데이터가 준비되면, 당신은 당신이 그것으로 원하는 건 뭐든지 할 것입니다.
따라서, 요약하면 : 첫번째 예는 동안 제 안되며, 차단한다.
다음의 두 개의 실시 예의 출력 :
// Example 1 - Synchronous (blocks) var result = database.query("SELECT * FROM hugetable"); console.log("Query finished"); console.log("Next line"); // Example 2 - Asynchronous (doesn't block) database.query("SELECT * FROM hugetable", function(result) { console.log("Query finished"); }); console.log("Next line");
될 것이다 :
노트 노드 자체는 단일 스레드이지만, 병렬로 실행할 수있는 작업이 있습니다. 예를 들어, 파일 시스템 작업은 다른 프로세스에서 발생한다.
노드가 작업을 비동기 할 수있는 이유 : 하나 개의 스레드는 파일 시스템 작업을하고, 주요 노드 스레드가 자바 스크립트 코드를 실행 유지하면서. 노드, 파일 시스템 스레드 통지 등의 완료, 실패 또는 진행 등 특정 이벤트의 메인 노드 스레드, 같은 이벤트 기반 서버에서 같은 데이터베이스 쿼리 또는 오류의 결과로 해당 이벤트 (와 관련된 모든 데이터와 함께 메시지) 메인 노드 스레드는 데이터 수행 할 작업을 결정합니다.
당신은 여기에 더 이것에 대해 읽을 수 있습니다 : IO 모델을 차단 단일 스레드 비는 Node.js를 작동하는 방법
-
2.다음과 같이이 두 가지 접근 방식의 차이는 :
다음과 같이이 두 가지 접근 방식의 차이는 :
동기 방식 : 이 단지는 다음 작업을 실행 한 후에는 완료로 각 작업을 기다립니다. 당신의 쿼리 : 을 console.log () 명령까지 및 실행되지 않습니다 쿼리가 데이터베이스에서 모든 결과를 얻을 실행을 완료하지 않는 한.
비동기 방식 : 그것은 결코 완전한 각 작업에 대기없고, 오히려 첫 번째 GO에서 모든 작업을 실행합니다. 결과가 사용할 수있게되면 각 작업의 결과는 처리됩니다. 당신의 쿼리 : 을 console.log () 명령은 곧 Database.Query () 메소드 후 실행됩니다. 배경과로드 결과의 데이터베이스 쿼리 실행은이 데이터를 검색이 완료되면 있지만.
사용 사례
-
3.당신이 두 예에 한 줄을 추가하는 경우이 조금 더 명확 될 것입니다 :
당신이 두 예에 한 줄을 추가하는 경우이 조금 더 명확 될 것입니다 :
var result = database.query("SELECT * FROM hugetable"); console.log(result.length); console.log("Hello World");
두 번째 :
database.query("SELECT * FROM hugetable", function(rows) { var result = rows; console.log(result.length); }); console.log("Hello World");
다음을 실행 해보십시오, 당신은 첫 번째 (동기) 예 것으로는 result.length가 '안녕하세요'라인 전에 인쇄됩니다 알 수 있습니다. 두 번째 (비동기) 예에서 result.length는 (대부분)은 "안녕하세요"라인 후에 인쇄됩니다.
두 번째 예에서 database.query 백그라운드에서 비동기 적으로 실행하기 때문이다, 그리고 스크립트는 "안녕하세요"와 직선 계속됩니다. 데이터베이스 쿼리가 완료되면 CONSOLE.LOG은 (result.length)에만 실행됩니다.
-
4.첫째, 나는이 질문에 대답 늦은 오전 알고 있습니다.
첫째, 나는이 질문에 대답 늦은 오전 알고 있습니다.
동기 및 비동기 논의하기 전에, 우리에게 프로그램 실행 방법에 대해 간단히 살펴 보자.
다음 명령문이 실행되기 전에 동기 경우, 각각의 문은 완료됩니다. 이 경우 프로그램은 정확하게 문장의 순서대로 평가된다.
이 자바 스크립트에서 어떻게 비동기 작품이다. 자바 스크립트 엔진의 두 부분, 한 부분이있다 코드와 대기열에 작업에서 외모와 큐를 처리하는 또 다른. 큐 처리는 하나의 작업을 한 번에 일어날 수있는 이유는 하나 개의 스레드에서 발생합니다.
비동기 동작 (제 데이터베이스 조회 등)를 볼 때, 코드가 해석되고, 동작이 큐에 배치되어 있지만,이 경우에는 콜백 때 동작 완료를 실행하도록 등록된다. 큐는 이미 많은 작업을 할 수 있습니다. 대기열의 앞쪽에 작업 처리 큐로부터 제거된다. 데이터베이스 쿼리에 대한 작업이 처리되면, 요청이 데이터베이스로 전송하고 완료되면 콜백 완료에 실행됩니다. 이 경우 - 이때 갖는 큐 프로세서가 다음 동작의 조작 이동 "처리"
console.log("Hello World");
데이터베이스 쿼리 아직 처리되고 있지만 CONSOLE.LOG 작업 대기열의 앞쪽에 있고, 처리 얻는다. 이되는 동기 작업은 출력에 "Hello World"즉시 결과 바로 실행됩니다. 얼마 후, 데이터베이스 동작 완료는 오직 다음 쿼리 등록 된 콜백을 행의 결과 변수의 값을 설정하고 호출 처리된다.
그것은 하나 개의 비동기 동작은 다른 비동기 방식으로 작동 할 가능성이,이 제 2 동작은 큐에 배치되며, 그 큐의 앞에 올 때 처리된다. 비동기 작업에 등록 된 콜백을 호출하면이 완료되면 자바 스크립트 실행 시간이 작업의 결과를 반환하는 방법입니다.
이 콜백을 요구하는 경우 비동기 인 자바 스크립트를 작동 아는 간단한 방법은 메모입니다 - 콜백이 첫 번째 작업이 완료되면 실행 얻을 것이다 코드입니다. 문제의 두 가지 예에서, 우리는 두 번째 경우는 콜백을 가지고 볼 수 있으므로 두의 비동기 작업입니다. 이 때문에 비동기 작업의 결과를 처리하는 다른 스타일의 항상 그런 것은 아니다.
약속에 대해 읽어 더 많은 내용. 약속은 비동기 작업의 결과가 처리 할 수있는 또 다른 방법입니다. 약속의 좋은 점은 코딩 스타일이 더 동기 코드 같은 느낌이다.
노드 'FS'와 같은 많은 도서관, 일부 작업 모두 동기 및 비동기 스타일을 제공합니다. 설정 파일 읽기의 경우처럼 - - 작업이 오래 걸리지 않고 많이 사용하지 않는 경우 동기 스타일의 작업을 쉽게 읽을 수 코드가 발생합니다.
-
5.SQL 쿼리 실행이 완료 될 때까지 동기 경우, CONSOLE.LOG 명령이 실행되지 않습니다.
SQL 쿼리 실행이 완료 될 때까지 동기 경우, CONSOLE.LOG 명령이 실행되지 않습니다.
비동기 경우, CONSOLE.LOG 명령을 직접 실행됩니다. 쿼리의 결과는 다음 언젠가 나중에 "콜백"기능에 의해 저장됩니다.
-
6.가장 큰 차이점은 비동기 프로그래밍, 당신이 그렇지 않으면 실행을 중단하지 않는 것입니다. '요청'제작되는 동안 다른 코드를 실행을 계속할 수 있습니다.
가장 큰 차이점은 비동기 프로그래밍, 당신이 그렇지 않으면 실행을 중단하지 않는 것입니다. '요청'제작되는 동안 다른 코드를 실행을 계속할 수 있습니다.
-
7.함수 번째 비동기한다.
함수 번째 비동기한다.
프로그램이 각 행을 기다리는 첫 번째 힘은 다음 하나 계속하기 전에이를 실행할 것칩니다. 두번째는, 각 라인은 함께 (독립적) 한 번에 실행될 수있다.
언어 및 프레임 워크 비동기 또는 동시성 실시간 전송 (예. 채팅, 주식 응용 프로그램)이 필요한 것들에 대한 대단한 수 (JS, Node.js를).
-
8.동기화 프로그램
동기화 프로그램
C, C #, 자바 같은 프로그래밍 언어 그렇게도 당신이 당신의 쓰기의 순서로 실행됩니다 무엇을 쓰기 동기화 프로그램입니다.
-GET DATA FROM SQL. //Suppose fetching data take 500 msec -PERFORM SOME OTHER FUNCTION. //Performing some function other will take 100 msec, but execution of other //task start only when fetching of sql data done (i.e some other function //can execute only after first in process job finishes). -TOTAL TIME OF EXECUTION IS ALWAYS GREATER THAN (500 + 100 + processing time) msec
비동기
NodeJs 비동기 기능을 함께 제공, 그것은 비 블로킹 자연에서 시간 (가져 오는 읽기, 쓰기)을 복용하는 모든 I / O 작업에서 가정을의, nodejs가 마무리 될 작업에 대한 유휴 대기를 유지하지 않습니다, 그것은 ' 큐에서 다음 작업을 실행을 시작할 것이다, 그 시간의 촬영 작업이 완료 때마다 콜백을 사용하여 통지합니다. 다음 예는 도움이 될 것입니다 :
//Nodejs uses callback pattern to describe functions. //Please read callback pattern to understand this example //Suppose following function (I/O involved) took 500 msec function timeConsumingFunction(params, callback){ //GET DATA FROM SQL getDataFromSql(params, function(error, results){ if(error){ callback(error); } else{ callback(null, results); } }) } //Suppose following function is non-blocking and took 100 msec function someOtherTask(){ //some other task console.log('Some Task 1'); console.log('Some Task 2'); } console.log('Execution Start'); //Start With this function timeConsumingFunction(params, function(error, results){ if(error){ console.log('Error') } else{ console.log('Successfull'); } }) //As (suppose) timeConsumingFunction took 500 msec, //As NodeJs is non-blocking, rather than remain idle for 500 msec, it will start //execute following function immediately someOtherTask();
즉, 출력과 같다 :
Execution Start //Roughly after 105 msec (5 msec it'll take in processing) Some Task 1 Some Task 2 //Roughly After 510 msec Error/Successful //depends on success and failure of DB function execution
동기 확실히 600 이상 (500 + 100 + 처리 시간) 밀리가 비동기 시간을 절약 할 곳의 차이는 분명하다.
-
9.비동기 기능이없는 동안 동기 기능이 차단된다. 동기 기능으로, 다음 명령문 전에 완전한 문장이 실행됩니다. 문 중 하나가 시간이 오래 걸릴 경우이 경우, 프로그램이 정확하게 진술과 프로그램의 실행의 순서대로 평가되고 일시 중지됩니다.
비동기 기능이없는 동안 동기 기능이 차단된다. 동기 기능으로, 다음 명령문 전에 완전한 문장이 실행됩니다. 문 중 하나가 시간이 오래 걸릴 경우이 경우, 프로그램이 정확하게 진술과 프로그램의 실행의 순서대로 평가되고 일시 중지됩니다.
매개 변수 및 실행이 비동기 함수가 호출 후 즉시 다음 줄에 계속 비동기 기능은 일반적으로 콜백을 받아들입니다. 비동기 작업이 완료되고 호출 스택이 비어있을 때 콜백 만 호출됩니다. 이러한 웹 서버 또는 데이터베이스를 쿼리에서 데이터를로드 등 중부 작업이 비동기 그래서 메인 스레드가 다른 작업을 실행하는 대신 전체에 그렇게 오래 작동 할 때까지 계속 차단 할 수있는 수행해야합니다 (브라우저의 경우, UI는 동결) .
원래는 Github에서에 게시 됨 : 링크
-
10.동기
동기
비동기
예:
//이 함수는 동기 로그 함수 (ARG) { CONSOLE.LOG (ARG) } (1) 기록; //이 함수는 비동기 에서는 setTimeout (() => { CONSOLE.LOG (2) }, 0); 로그 (3)
from https://stackoverflow.com/questions/16336367/what-is-the-difference-between-synchronous-and-asynchronous-programming-in-node by cc-by-sa and MIT license
'NODEJS' 카테고리의 다른 글
[NODEJS] 거부에 전달하지 체인 약속 (0) | 2020.09.16 |
---|---|
[NODEJS] Node.js를 사용하여 명령 줄 바이너리를 실행 (0) | 2020.09.16 |
[NODEJS] Node.js를 - 구문 에러 : 예기치 않은 토큰 가져 오기 (0) | 2020.09.16 |
[NODEJS] NPM package.json 파일에 종속 devDependencies 및 peerDependencies의 차이점은 무엇입니까? (0) | 2020.09.16 |
[NODEJS] package.json에서 물결표 (~)와 캐럿의 차이 (^)은 무엇입니까? (0) | 2020.09.16 |