동기 프로그래밍 (sync)  vs 비동기 프로그래밍 (async)

비동기 프로그래밍에 대해서 알기 위해선 우선 동기 프로그래밍이 뭔지 먼저 알아야 한다.

 

동기적 프로그래밍은 "순서대로 하나의 작업씩 수행하는 행위"를 의미한다. 단순 반복하는 기계처럼

1 시작 1 끝

2 시작 2 끝

3 시작 3 끝 

................

이런 방식은 순차적으로 작업을 진행하기에 앞선 작업에 필연적으로 영향을 받을 수 밖에 없다.

즉, 1이 시작해서 안끝나면 그 뒤에 작업들은 1이 끝날 때까지 기다릴 수 밖에 없다.

 

이제 일상생활에서의 예를 가지고 이해해보자.

아침에 일어나서 따뜻한 우유와 빵을 같이 먹는다고 가정해보자.

 

그렇다면 해야할 일을 나열해보자.

 

침대정리

냉장고에서 우유꺼내기

머그컵에 우유 붓기

우유가 담긴 머그컵 전자레인지에 넣고 1분 돌리기

(따뜻해진 우유)전자레인지에서 꺼내기

식빵 자르기

잼 바르기

먹기

 

이 일련의 과정을 동기식으로 한다면 위와 똑같을 것이다.

다만, 비동기식으로 한다면 

 

침대정리

냉장고에서 우유꺼내기

머그컵에 우유 붓기

우유가 담긴 머그컵 전자레인지에 넣고 1분 돌리기

식빵 자르기

잼 바르기

(따뜻해진 우유)전자레인지에서 꺼내기

먹기

 

즉, 전자레인지에 요청을 보내놓고 끝날 때까지 기다렸다가 다음 일을 하느냐 아니면 다른 일을 하고 있다가 요청에 대한 결과가 나오면 이어서 일을 하느냐 차이다.

 

그렇다고 이런 동기적 프로그래밍 방식이 비효율적이라는 것은 아니다. 만약 A가 끝나야지만 B가 실행되어야하는

로직의 프로그램이 있다면 동기적으로 처리해야 바람직하게 작동할 것이다. 여기서는 우유를 꺼내오지도 않고 머그컵에 우유를 부으려는 행위가 비유에 맞을거 같다.

 

여기서 알 수 있듯이, 비동기 프로그래밍은 꼭 동기적으로 실행하지 않아도 되는 기능을 보완하기 위해 나온 것을 볼 수 있다. 우유가 다 따뜻해질때까지 굳이 앞에서 아무것도 안하고 기다릴 필요가 없는 것처럼,,

 

비동기 프로그래밍은 요청을 보내놓고 결과값을 받을 때까지 또 다른 일을 수행할 수 있게 즉, 멈추지 않고 계속 일을 할 수 있게끔 프로그래밍해주는 것이다.

+ Recent posts