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