[0]

헷갈리기 쉬운 개념인 비동기/동기 실행의 차이점과 장단점에 대해 알아본다.

 

[1]

동기적 실행(synchronous execution)은 서브루틴 간에 명확한 실행 순서가 존재한다. A, B, C의 세 가지 서브루틴이 존재하고 A, B, C 순으로 실행되기를 기대한다면 반드시 A->B->C의 순서로 실행되어야 한다. 즉, B는 A가 실행완료되기를 기다리며, C는 A와 B가 실행 완료되기를 기다린다.

 

비동기적 실행(asynchronous execution)에서는 서브루틴간에 명확한 실행 순서가 존재하지 않는다. 즉 A->B->C의 순서로 실행될 수도 있고, B->C->A의 순서로 실행될 수도 있다. 따라서 프로그래밍 시에 반드시 이점을 고려하여야 한다. 이러한 경우에는 서브루틴이 완료되었다는 것을 전달하기 위해 callback 패턴을 사용하기도 한다. 

 

[2]

동기적 실행은 프로그래밍을 처음 배울 때부터 익숙한 개념이다. 일반적으로, 코드는 1번째 줄 -> 2번째 줄 ->.... 식으로 line by line으로 실행되며, 이 순서가 뒤바뀌는 경우는 없다. 반면 비동기적 실행은 이러한 실행이 뒤바낄 수 있다.(물론 line 단위가 아니라 메소드나 함수 단위로 비동기화를 한다.) 비동기적 실행은 프로그래밍 시에 구조를 잘 짜 놓지 않으면 예기치 못한 버그가 발생하게 된다. 예를 들어 서로 다른 서브루틴에서 동시에 data write을 시도하여서, 실행 순서에 따라 동작이 달라질 수 있다. 반면에 멀티 스레드/코어가 일반화된 현시점에서는, 적절한 비동기화 구조는 상당한 성능 향상을 누릴 수 있다. 

 

[3]

혼동하지 말아야 할 것이, 동기/비동기적 실행은 멀티 스레딩과 전혀 관련이 없다. 즉 하나의 스레드에서도 비동기적 실행을 할 수 있고, 멀티 스레드에서도 동기적 실행을 할 수 있다. 스레드 혹은 코어의 개수가 중요한 것이 아니라, 서브루틴간의 실행 순서가 정해져 있는지가 중요하다. 이와 관해선, 이 링크의 그림을 참고하자.

 

참고

https://stackoverflow.com/questions/748175/asynchronous-vs-synchronous-execution-what-does-it-really-mean

 

Asynchronous vs synchronous execution, what does it really mean?

What is the difference between asynchronous and synchronous execution?

stackoverflow.com

 

'Computer Science > General' 카테고리의 다른 글

함수형 프로그래밍  (0) 2020.09.13
pass-by-value 와 pass-by-reference  (0) 2020.01.03
Container와 VM의 차이  (0) 2019.12.16
메모리 : 힙과 스택의 차이  (0) 2019.10.15
c++에서 레퍼런스와 포인터의 차이  (0) 2019.09.22

+ Recent posts