Blocking vs Non-Blocking
Blocking
: 자신의 작업을 진행 → 다른 작업이 시작 → 기다림
Non-Blocking
: 다른 작업에 관련없이 자신의 작업을 함
⇒ 자신의 일에 대한 제어권을 자신이 갖고 있는지
Sync vs Async
Synchromous
: 동시에 수행하거나, 동시에 끝나거나 → 끝나는 동시에 시작
⇒ 결과가 나오는 시점이 중요 [순서대로]
Asynchromous
: 시작과 종료가 일치 않지 않음 → 시작과 끝나는 것은 관계없음
⇒ 결과가 나오는 시점 상관없음 [순서 없음]
Sync - Blocking
Blocking Synchromous
- A 작업 중 → B에게 작업 전달
- B 작업중 → A는 작업 멈추고 B를 기다림
- B 완료 → A는 B의 결과로 바로 작업 시작
Non-Blocking Synchromous
- A 작업중 → B에게 작업 전달
- B 작업중 → A는 자기 작업을 하러 돌아감
- A는 B에게 작업 완료 됐는지 계속 물어봄
- B 완료 → A는 B의 결과로 바로 작업 시작
Blocking Asynchromous
- A 작업중 → B에게 작업 전달
- B 작업중 → A는 작업 멈추고 B를 기다림
- B 완료 → A는 B의 결과로 작업 시작
- 이게 뭔 꼴인가?
- 개발자의 실수 또는 기타의 이유로 이런식으로 구현됨
Non-Blocking Asynchromous
- A 작업중 → B에게 작업 전달
- B 작업중 → A는 자기 작업하러 감
- B 완료 → A에게 B 결과 전달
- A는 자기 작업 마치고 B 결과를 확인하고 작업