Synchronous programming
- 여러 작업(task)들을 순차적으로 실행하도록 개발
Asynchronous(비동기) programming
- 여러 작업들을 독립적으로 실행하도록 개발
asynchronous programming != multithreading
- asynchronous programming : 어러 작업을 동시에 실행하는 프로그래밍 방법론
- multithreading : asynchronous programming의 한 종류
- Asynchronous programming을 가능하게 하는 것 => multi-threads, non-block I/O
- 백엔드 프로그래밍의 추세는 스레드를 적게 쓰면서도 non-block I/O를 통해 전체 처리량을 늘리는 방향으로 발전 중
I/O 관점에서의 synchronous VS asynchronous
> case1
- synchronous I/O == block I/O
- asynchronous I/O == non-block I/O
> case2
- synchronous I/O : 요청자가 I/O 완료까지 챙겨야 할 때
- asynchronous I/O : 완료를 noti 주거나 callback으로 처리
> case3
- asynchronous I/O : block I/O를 다른 thread에서 실행
백엔드 아키텍처 관점에서 asynchronous
- 하나의 서비스는 기능과 역할에 따라 여러 개의 마이크로 서비스로 구성되고, 이들 사이에는 빈번하게 커뮤니케이션이 발생한다.
- Asynchronous communication : 메시지 큐를 이용, consume event & produce event