1. 프로그래밍 모델(방식) 구분
ㅇ 실행 방식 (Execution Model) : ("코드가 언제 실행되는가"의 문제)
- 동기식 프로그래밍 모델
. 프로그램 수행이 순차적이어서, 현재 코드 실행이 완료되어야 다음 코드가 실행되는 방식
.. 즉, 앞뒤 시간 순서 관계가 있음
- 비동기식 프로그래밍 모델
. 프로그램 수행이 순차적이지 않고, 이벤트 발생시 마다 그때그때 수행하는 방식
.. 즉, 앞뒤 시간 순서 관계가 필요 없는 이벤트 구동 방식(event-driven)에 적용됨
. 완료를 기다리지 않고, 즉시 다음 코드 실행하며, 결과는 나중에 처리
* 이 두 극단적인 프로그래밍 모델은,
. 코드 작성 방식이 다르며, 섞어쓸 때는 주의가 필요함
ㅇ 병렬 처리 방식 (Concurrency Model) : ("누가 실행하는가"의 문제)
- 단일 스레드
. 하나의 실행 흐름
. 순차 처리 (단, 비동기라도 동시성 구현이 가능)
.. (단일 스레드도 비동기 + 이벤트 루프로 동시성 가능)
- 멀티 스레드
. 여러 실행 흐름을 병렬/동시 실행
. 성능 향상 가능하지만 복잡성 증가
ㅇ 한편, 스레드 기반 프로그래밍은,
- 여러 스레드를 동시에 제어해야 함
- 이에따라,
. 동기화 문제 발생
. 경쟁 상태 (race condition)
. 교착 상태 (deadlock)
. 기아 상태 (starvation)
- 이깉은 문제들로, 프로그램 복잡도 및 개발 부담 증가 (프로그래머 부담이 큼)