Blocking / Non-blocking
Blocking
- 행위자가 취한 행위 자체가 또는 그 행위로 인해 다른 무엇이 막혀버린, 제한된, 대기하는 상태.
- 호출된 함수가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지고서 호출한 함수에게 바로 돌려주지 않으면 Block
- 호출된 함수가 자신이 할 일을 채 마치지 않았더라도 바로 제어권을 건네주어(return) 호출한 함수가 다른 일을 진행할 수 있도록 해주면 Non-block
Synchronous / Asynchronous
- 동시에 발생하는 것들
- 호출된 함수의 수행 결과 및 종료를 호출한 함수가(호출된 함수뿐 아니라 호출한 함수도 함께) 신경 쓰면 Synchronous
- 호출된 함수의 수행 결과 및 종료를 호출된 함수 혼자 직접 신경쓰고 처리한다면 Asynchronous
예시
Blocking & Synchronous
A: 서류 처리 좀 해주세요.
B: 알겠습니다. 잠깐만 거기 계세요
A: (가만히 서 있음)
B: (일처리 중..)
A: (과정 지켜봄. 내 일을 하러 못 가고 서 있음)
Blocking & Asynchronous
A: 서류 처리 좀 해주세요.
B: 알겠습니다. 잠깐만 거기 계세요
A: (가만히 서 있음)
B: (일처리 중..)
A: (B가 하는 일에는 관심 없지만 못 가고 계속 서 있음)
Non-blocking & Synchronous
A: 서류 처리 좀 해주세요.
B: 알겠습니다. 가서 볼 일 보세요
A: 넵
B: (일처리 중..)
A: 서류 처리 됬나요?
B: 아직요
A: 서류 처리 됬나요?
B: 아직요
Non-blocking & Asynchronous
A: 서류 처리 좀 해주세요.
B: 알겠습니다. 가서 볼 일 보세요
A: 넵
B: (일 처리 중..)
A: (자기 할 일 중..)
B: 서류 처리 완료되었습니다.
A: 감사합니다