본문 바로가기
Computer Science/Operating System

Synchronous(동기)와 Asynchronous(비동기)는 무엇인가요?

by Ray 2021. 5. 17.

Synchronous(동기)와 Asynchronous(비동기)는 무엇인가요??

1. 동기(Synchronous)란?

동기(synchronous)는 동시에 일아난다는 뜻으로, 요청과 동시에 그 결과가 나온다는 약속이다.

즉, 요청을 하면 요청에 대한 응답(결과)이 올 때까지 기다려야 한다.

일반적으로 메소드의 실행과 동시에 반환 값이 기대되는 경우를 동기 라고 표현한다.

그리고 결과 값이 반환되기 전까지 blocking 되어 있다는 것을 의미한다.

⇒ system call이 완료를 기다림

2. 비동기(Asynchronous)란?

비동기(Asynchronous)는 동시에 일어나지 않는다는 의미로, 요청과 결과가 동시에 일어나지 않는다는 약속이다.

즉, 요청과 동시에 결과가 올 것을 기대하지 않으며 실행을 지속한다.

blocking되지 않고 이벤트 큐에 들어가거나, 백그라운드 스레드에 task를 위임하고 다음 코드를 실행한다.

⇒ system call이 완료를 기다리지 않음

3. 장점과 단점?

- 동기(Synchronous)

    장점 : 설계가 간단하고 직관적이다.

    단점 : 요청에 대한 결과가 반환되기 전까지 대기해야 한다. 

- 비동기(Asynchronous)

    장점 : 요청에 대한 결과과 반환되는 시간동안 다른 작업을 수행할 수 있다.

    단점 : 동기식보다 설계가 복잡하다.

4. 비동기적 실행이 동기적 실행보다 좋다?

비동기적 실행은 동기적 실행보다 많은 비용이 발생한다.

동기적 실행은 절차적으로 실행되기 때문에, 변수와 다음 상황을 쉽게 예측할 수 있고 코드 작성과 디버깅이 쉽다.

반면, 비동기적 실행은 각각의 작업이 독립적으로 실행되기 때문에 1번 작업의 결과가 2번 작업의 실행에 필요하다면 별도의 작업을 필요로 한다.

일반적으로 콜백 함수를 중첩시켜 작업의 순서를 만드는데, 요구사항과 구현이 늘어날수록 콜백의 깊이가 깊어지며 어려움이 생긴다.