[CS] Blocking, Non-Blocking, Synchronouse, Asynchronouse
Blocking
-
작업이 시작되면 프로그램이 다른 작업을 수행하지 못하고 대기하는 것 (= 반환값을 대기)
-
아무 일도 하지 못함
-
리턴이 되는 것을 대기
Non-Blocking
- 호출된 함수가 바로 리턴 ▶ 결과값을 줄 수 없음
- 호출된 함수가 바로 리턴하여 호출한 함수에게 제어권을 넘겨줌
- 작업 완료 시점을 알고 싶다면 Callback, Polling 등의 기법 이용
✔ 호출되는 함수가 바로 리턴되는지 아닌지가 동기/비동기와의 차이점
Synchronouse (동기)
- 요청한 결과가 동시에 일어나 시간이 얼마나 걸리든 상관하지 않고 결과를 받아내는 것
- 리턴과 상관 없이 작업 여부를 계속 확인
- Blocking과 동기는 같은 의미로 사용되는 경우가 많음
Asynchronouse (비동기)
-
요청한 결과가 동시에 일어나지 않아 바로 결과가 주어지지 않는 것
- 호출되었을 때, callback으로 전달해서, 작업 여부를 callback을
- 호출하는 함수는 함수 작업 완료 여부를 신경쓰지 않음
✔ 호출되는 함수가 작업이 완료되었느냐 확인
Non-Blocking이면서 Sync 인 작업은?
호출 된 함수가 바로 리턴하지만, Sync이기 때문에 작업 완료 여부를 계속 확인하려 함
Blocking하지 않으므로 호출 함수는 바로 리턴하고, 계속 확인 (Polling)
제어권 = 호출한 함수
Blocking일때 Async
리턴하지 않고 대기
호출한 대상은 호출된 함수가 작업완료가 종료되었는 지 관심이 없지만 일단 대기
호출된 대상은 로직 실행
매우 비효율적인 특징을 가짐