동기(Synchronous) VS 비동기(Asynchronous)
- 동기 : 함수A가 함수B의 작업 완료 후 리턴을 기다리거나, 작업의 완료(리턴)를 계속해서 확인하는 작업 흐름
- 비동기 : 함수 A가 함수 B를 호출할 때 콜백 함수를 함께 전달하여 함수 B의 작업이 완료되면 함께 보낸 함수를 실행
- 이전에 호출한 함수의 작업 완료 여부를 신경쓰지 않는 상황
- call back이 오기 전까지 신경쓰지 않고 다른 일을 할 수 있다.
- 호출되는 함수의 작업 완료 여부를 신경쓰냐, 함수 실행/리턴 순차적인 흐름을 따르는가
블로킹(blocking) vs 논블로킹(non-blocking)
- 블로킹
- A 함수가 B를 호출하면 제어권을 B 함수에게 넘겨짐
- A에겐 제어권이 없기 떄문에 실행을 멈춤
- B함수 실행이 끝나면 제어권을 다시 A가 받아서 실행
- 논블로킹
- A함수가 B함수를 호출해도 본인 행동의 제어권을 본인(A)이 가지고 있음
- B 함수가 실행되지만 A는 B를 호출한 이후에도 자신의 코드를 계속 실행할 수 있다.
4가지의 조합적 동작의 차이
- Sync - Blocking
- 함수 A는 함수 B의 리턴값을 필요로한다. (동기)
- 제어권을 함수 B 에게 제어권을 넘겨준다. (블로킹)
- 함수 B가 실행을 완료하여 리턴값과 제어권을 돌려줄 때까지 기다린다.
- Sync - NonBlocking
- A 함수는 B 함수를 호출한다.
- 이 때 A 함수는 B 함수에게 제어권을 주지 않고 본인의 코드를 계속 실행한다 (논블로킹)
- 하지만 A 함수는 B 함수의 리턴값이 필요하기 때문에, 계속 B 함수에게 함수 실행을 완료했는지 물어본다 (동기)
- 대기 시간동안 다른 일 수행 가능
- Async - Nonblocking
- A 함수는 B 함수를 호출한다.
- 이 때 제어권을 A는 계속 가지고 있어서 B 함수를 호출한 이후에도 멈추지 않고 자신의 코드를 계속 실행 (논블로킹)
- B 함수를 호출할 때 콜백 함수를 같이 넘겨서 B 함수가 작업이 끝나면 콜백함수 실행을 통해 리턴 전달 (비동기)
- Async - Blocking
- A 함수는 B 함수를 호출
- 제어권을 함수 B 에게 제어권을 넘겨준다. 제어권을 받기 전까지 기다린다. (블로킹)
- B 함수를 호출할 때 콜백함수를 같이 넘겨서 B 함수가 작업이 끝나면 콜백함수 실행을 통해 리턴 전달 (비동기)
'CS > 네트워크' 카테고리의 다른 글
[네트워크] HTTP와 HTTPS, TCP & UDP, GET & POST, OSI 7 계층 (0) | 2022.09.30 |
---|