동기 vs 비동기
처리해야 할 작업들을 어떠한 '흐름'으로 처리할 것인가에 대한 관점.
즉, 호출되는 함수의 작업 완료 여부를 신경쓰냐에 따라 함수 실행/리턴의 순차적인 흐름을 따르느냐 안따르느냐가 관심사
동기 (Synchronous)
- 작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작함.
- 호출하는 함수 A가 호출되는 B의 작업 완료 후 리턴을 기다리거나, 바로 리턴 받더라도 미완료 상태라면 작업 완료 여부를 스스로 계속 확인하며 신경쓴다.
- 즉, 함수 A가 함수 B를 호출한 뒤 함수 B의 리턴값을 계속 신경쓰면 동기.
비동기 (Asynchronous)
- 시작과 종료가 일치하지 않으며, 끝나는 동시에 시작을 하지 않음
- 함수 A가 함수 B를 호출할 때 콜백 함수를 함께 전달해서 함수 B의 작업이 완료되면 함께 보낸 콜백 함수를 실행한다.
- 함수 A는 함수 B를 호출한 뒤로 함수 B의 작업 완료 여부는 신경쓰지 않는다.
- 즉, 신경 쓰지 않으면 비동기
Blocking vs Non-Blocking
처리되어야 하는 작업이 전체적인 작업 '흐름'을 막느냐 안막느냐에 대한 관점
즉, 제어권이 누구한테 있느냐가 관심사
Blocking
- A 함수가 B 함수를 호출하면, 제어권을 A가 호출한 B에게 넘겨준다.
- 제어권이 B에게 넘어갔으므로, A 함수는 실행을 잠시 멈춘다.
- B 함수가 종료되면 자신을 호출한 A 함수에게 제어권을 돌려준다.
Non-Blocking
- A 함수가 B 함수를 호출해도 제어권은 그대로 자신이 가지고있다.
- B 함수가 실행되는 동안 A 함수도 자신의 코드를 계속 실행한다.
'TIL' 카테고리의 다른 글
디자인패턴 - 전략 패턴 (Strategy Pattern) (0) | 2022.10.22 |
---|---|
객체지향 개발 5대 원리, SOLID (0) | 2022.10.21 |
정규표현식 (0) | 2022.10.12 |
csv insert with MySQL (Load data infile) 방법 (0) | 2022.08.30 |
왜 Hello World ? (0) | 2021.12.25 |