참고:Blocking, Non-blocking & Synchronous,Asynchronous
참고: blocking, non-blocking IO, 동기, 비동기 개념 정리
Blocking/Non-blocking
호출된 함수에서 바로 제어권을 리턴하는지, 할 일을 마치고 리턴하는지 따라 Blocking과 Non-blocking으로 나누어진다.
- Blocking : 작업을 요청하면, 요청한 쪽은 해당 작업이 끝날 때까지 응답을 받지 못하고 대기한다.
- Non-Blocking : 작업을 요청하면, 즉시 응답을 받는 경우
💡 상황: 함수 A 안에서 함수 B를 호출했다.
- Blocking : 함수 B가 할 일을 마칠 때까지 함수 B에게 제어권이 있는 상황. A는 B가 다 마칠 때까지 기다려야 한다.
- Non-blocking : 함수 B가 할 일을 마치지 않았어도, A에게 제어권을 바로 넘겨준다. A는 B 작업을 기다리면서 다른 작업을 수행할 수 있다.
Synchronous/Asynchronous
**호출된 함수(B)의 상태(작업 완료 여부)**를 호출한 함수(A)가 체크하는지, 체크하지 않는지에 따라 동기, 비동기로 나누어진다.
- 동기 (Sync) : 작업을 요청한 쪽에서 작업의 완료 여부를 체크한다.
- 비동기 (Async) : 작업을 요청받은 쪽이 Callback을 전달해서 작업의 완료 여부를 호출한 함수에 알려준다. 호출한 함수는 callback이 오기 전까지 신경 쓰지 않고 다른 일을 할 수 있다.
💡 상황: 함수 A 안에서 함수 B를 호출했다.
- Synchronous : 함수 A는 함수 B의 실행을 기다리면서 B의 상태를 계속 체크한다.
- Asynchronous : 함수 A는 함수 B의 상태를 체크하지 않는다. (Callback)
💡 성능, 자원의 효율적 사용 관점에서 NonBlocking-Async 모델이 가장 유리하다.
예시 정리
상황: 함수 A 안에서 함수 B를 호출
1) Blocking-Sync
- 제어권 : 함수 B
- 함수 A는 함수 B 가 끝날 때까지 기다린다.
- 함수 A는 함수 B의 상태를 확인한다.
2) Blocking-Async
- 제어권 : 함수 B
- 함수 A는 함수 B 가 끝날 때까지 기다린다.
- 함수 A는 함수 B의 상태를 신경 쓰지 않는다.
3) NonBlocking-Sync
- 제어권 : 함수 A
- 함수 A는 함수 B를 기다리지 않고 다른 작업을 수행한다.
- 함수 A는 다른 작업을 수행하면서도, 함수 B의 상태를 계속 확인한다.
4) NonBlocking-Async
- 제어권 : 함수 A
- 함수 A는 함수 B를 기다리지 않고 다른 작업을 수행한다.
- 함수 A는 함수 B의 상태를 신경 쓰지 않는다.
'CS' 카테고리의 다른 글
[Java] Runnable, Thread (0) | 2023.07.11 |
---|---|
[CS 스터디] Blocking & Non-Blocking I/O (0) | 2023.07.10 |
[CS 스터디] 대칭키, 공개키(비대칭키) (0) | 2023.06.30 |
[CS 스터디] HTTP, HTTPS (0) | 2023.06.30 |
[Java] Stream API (0) | 2023.06.26 |