Blocking

- 작업을 하다가 다른 주체로 작업이 넘어갈 경우 그 작업이 끝나고 나서야 자신의 작업을 이어하는 것
- A가 B를 호출하면 제어권이 B로 넘어감

 

Non-Blocking

- 다른 주체의 작업과는 상관없이 자신의 일을 하는 것
- A가 B를 호출해도 제어권은 자신이 가지고 있다.

 

-> 제어의 관점 (제어권)

 

Sync

- 두 개 이상의 주체가 서로 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작할 때를 의미
- A가 B를 호출한 뒤, B의 리턴을 계속 확인한다.

 

Async

- 두 주체가 서로의 시작, 종료와는 관계 없이 별도의 수행 시작/ 종료시간을 가지고 있을 때를 의미
- A가 B를 호출할 때 콜백 함수를 함께 전달해서, B의 작업이 완료되면 콜백 함수를 실행함으로써 A는 B를 신경쓰지 않음

 

-> 순서와 결과(처리)의 관점


Sync-Blocking

- 결과가 처리되어 나올때까지 기다렸다가 return값으로 결과를 전달
- 값을 입력받아 처리해야 하는 경우

 

Async-Blocking

- 결과가 처리될 때까지 기다리지만 콜백함수로 제어권을 돌려받을 뿐 결과를 바로 처리하지는 않음
- 일반적으로 사용하지 않는다.

 

Sync-NonBlocking

- 제어권은 주지 않은 상태에서 지속적으로 다른 주체의 결과를 확인하는 것 (polling)
- 로딩바를 보여주는 경우

 

Async-NonBlocking

- 자신의 작업이 멈추지도 않고, 다른 주체가 하는 작업의 결과가 나왔을 때 콜백을 설정
- 자신의 일을 계속 할 수 있기 때문에 해야 할 작업이 대규모, 동기가 필요하지 않을때 효과적
- 대규모 사용자에게 푸시메세지, 다양한 외부 API를 한번에 호출할 때