그때 내가 많은 책과 개념들이 '동기'와 '비동기'의 의미를 착각하고 있다고 했었지.

'동기'는 '비동시',

'비동기'는 '동시'의 개념에 가깝다고 말야.


결국

'동시' 라는건, 순서에 상관없는 일을 병렬화 하기 위해 존재하는 것이다.

'비동시' 라는건, 순서에 종속적인 일을 절차에 맞게 수행하는 것이다.


여기서, '시간', '순서', '문맥( context )' 이라는 세가지 고려 요소가 등장한다.


또한,


0. 동시성의 매체들 ( 결합을 느슨하게 한다 )

signal, interrupt, event, message


1. 동시의 생성자들

create_thread, create_process( fork ), setup_interrupt


2. 동시의 처리자들

ISR ( interrupt service routine ), event_handler, call_back_handler, thread_handler


3. 비동시적 흐름제어 요소들

jmp( goto ), int, iret, call / return


4. context 의 저장과 관련된 요소들

co-routine, setjmp( ~longjmp )


5. 두 동시 코드를 하나의 흐름으로 동기화 하기 위한 구현들

spin_lock, blocking, join, wait_for


등이 존재한다.


blocking 과 non-blocking 은 구현의 한 갈래라고 보는게 맞고,

동기 비동기와 조합해 개념적 패턴만 늘일 필요는 없다고 본다.


어차피 두 개 조합만으로 구현되는 경우도 일부고 말이지.