
1. Blocking
- 호출된 함수가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지고가서 호출한 함수에게 바로 돌려주지 않음
2.Non-blocking
- 호출된 함수가 자신이 할 일을 채 마치지 않더라도 제어권을 건내주어 호출한 함수가 다른일을 진행할 수 있도록 해줌
3. Sync
- 호출된 함수의 수행 결과 및 종료를 호출한 함수가 신경 쓸 경우
4. Async
- 호출된 함수의 수행 결과 및 종료를 호출된 함수 혼자 직접 신경 쓰고 처리한다면
Blocking/Non-blokcing
- 제어권이 누구에게 있냐
Sync/Async
- 누가 신경을 쓰냐
Sync Blocking(동기 차단)

1. System call이 호출되면 read Application이 차단되고 kernel로 Context switching 됨
2. read가 시작되고 read 응답이 반환되면 커널 공간에서 사용자 공간으로 부터 데이터 이동이 됨
3. Application이 차단 해제가 되고 read 호출이 반환이 됨
- Application 관점에서 볼때 긴 시간동안 대기를 해야함
Sync Non-blocking(동기 비차단)

1. Application이 kernel쪽에 System call 호출, kernel로 Context swtiching 됨
2. 읽기가 시작이 되지만 아직 응답이 없으므로 오류코드(EAGAIN/EWOULDBLOCK)을 반환
3. 응답이 있을때 까지 계속 1번 호출
4. 1번 호출 했을때 읽기 응답이 있을 경우 커널 공간에서 사용자 공간으로 부터 데이터 이동이 됨
- 읽기 응답이 있을때 까지 System call을 호출
Async Blocking(비동기 차단)

1. Application이 kernel쪽에 System call 호출, kernel로 Context swtiching 됨
2. 읽기가 시작이 되지만 아직 응답이 없으므로 오류코드(EAGAIN/EWOULDBLOCK)을 반환
3. Select() 호출 한 상태에서 block이 됨
4. select()로 인한 알림을 받을 경우 1번 호출
5. 커널 공간에서 사용자 공간으로 부터 데이터 이동이 됨
Async Non-blocking(비동기 비차단)

1. Application이 kernel쪽에 System call 호출, kernel로 Context swtiching 됨
2. 읽기 시잔되지만 Application 쪽에서는 다른 일 처리함
3. 읽기 응답이 도착하면 read 신호 or 스레드 기반 콜백을 생성하여 커널 공간에서 사용자 공간으로 부터 데이터 이동이 됨
- 읽기 요청을 처리해도 기다리지 않고 다른일을 할 수 있음
출처 : https://musma.github.io/2019/04/17/blocking-and-synchronous.html
https://developer.ibm.com/articles/l-async/
동기와 비동기, 그리고 블럭과 넌블럭
무릇 모든 개발자들, 아니 비단 개발자가 아니라 할지라도 컴퓨터 관련 산업계 종사자들이라면 오다 가다 한 번씩은 꼭 들어보고, 또 익혔음직한 내용이겠습니다. 이름하야, 동기(Synchronous)와 비
musma.github.io