04. Sync/Async, Blocking/Non-Blocking
Blocking/Non-Blocking, Sync/Async
차이
| Blocking/Non-Blocking | Sync/Async |
|---|
A 함수가 B 함수를 실행시켰을 때 주도권이 어디 있는가 | A 함수가 B 함수를 실행시켰을 때 B 함수의 결과에 종속되어 처리되는가 |
Blocking/Non-Blocking
| Blocking | Non-Blocking |
|---|
A함수가 B함수를 실행시키면 실행 흐름이 B함수로 넘어감 | A 함수가 B 함수를 실행시켰을 때 B 함수와 별도로 여전히 실행 흐름이 A에게 있음 |
Sync/Async
| Sync | Async |
|---|
| A함수가 B함수의 결과에 종속적임 | A 함수가 B 함수의 결과에 비종속적(상관없음) |
경우의 수
| 경우의 수 | Sync | Async |
|---|
| Blocking | A함수가 B함수로 넘어가고, return되면 그제서야 A함수로 실행 흐름이 다시 돌아오고 A함수에서 바로 return 값을 받아서 처리 | B 결과에 비 종속적이지만 Blocking이므로 B함수 실행 시 B함수로 제어권이 넘어가, A는 Block됐다가 B가 다 처리되고 return되면 그제서야 제어권이 넘어와 다시 진행 |
| Non-Blocking | A 함수가 B 함수 실행과 상관없이 계속 주도권을 가지고 있지만 B의 결과에 종속적이기 때문에 B의 return 유무를 계속 체크하면서 확인하다가 끝나면 그 값 바로 받아서 진행 | B함수가 실행된 것과 상관없이 주도권을 가지고 있으면서 B의 결과에 비종속적이므로 B가 return 했는지 확인하지 않고 그냥 다른 거 계속 하다가 언젠가 return 된 것 확인해서 처리 |