본문 바로가기
기타 개념정리

동기적, 비동기적 프로그래밍 차이 및 예제

by wakestand 2020. 4. 7.
반응형

프로그래밍 언어에서

동기적(Synchronous)

비동기적(Asynchronous)의

 

차이점은 다음과 같다

 

동기적(Synchronous)

- 특정 코드를 수행 완료한 이후 아래줄의 코드 수행

 

비동기적(Asynchronous)

- 특정 코드를 수행하는 도중에도 아래로 계속 내려가며 수행함

 

예제를 통해 보자면 아래와 같다

 

// 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");

 

먼저 동기적일 경우에는 

하나를 수행한 후에 아래로 내려가기 때문에

Query finished 후에 Next Line이 나오게 되지만

위 코드가 오래 걸린다면

아래 코드도 모두 대기해야 하므로

비동기적일 경우에 비해 속도가 느리다

 

하지만 진행방향이 일방향이기 때문에

코드에서 에러가 나더라도 어디에서 에러가 났는지

쉽게 파악할 수 있다

 

하단의 비동기적일 경우에는

특정 코드를 완료하지 않아도

바로 밑으로 내려가며 다른 코드들을 수행하기 때문에

훨씬 속도가 빠르다

 

다만 select가 얼마나 빨리 끝나느냐에 따라

Query finished와 Next line 중

어느것이 먼저 나올지 예측할 수 없는 것처럼

 

여러 군데에서 동시에 코드가 수행되기 때문에

진행방향을 예상하기 힘들다

 

마지막으로 동기적, 비동기적 언어로는 뭐가 있나요 하면

딱히 고민을 할 필요가 없다

 

동기적이기만 한 언어는 아래와 같은데

 

Argos
Atom
Averest
ChucK
Esterel
LabVIEW
LEA
Lustre
PLEXIL
SIGNAL
SOL
SyncCharts

 

보면 알겠지만 실전에서 사용할 일이 없는 언어들이다

 

반면 비동기적인 언어는

자바, C++, 파이썬, 자바스크립트 등

대부분의 언어들인데

 

해봤는데 동시에 수행 안되던데?

싶으면 쓰레드 개념 등을 통해

동시에 수행하는 방법을 적용하지 않아서 그럴 것이다

 

자바 쓰레드 예제 및 사용 이유 알아보기

java에서 스레드(Thread)란 무엇인가? 스레드를 사용하기 전 기존 자바에서는 car.open(); car.entrance(); 이렇게 코드 두 줄이 있다고 하면 car.open()을 수행한 후에 car.entrance();를 수행하게 된다 즉 위 코..

wakestand.tistory.com

반응형

댓글