제어권 : 함수의 코드를 실행할 권리 같은 것으로, 제어권을 가진 함수는 자신의 코드를 끝까지 실행 한 후 자신을 호출한 함수에게 돌려준다.
결과값을 기다림 : A에서 B함수를 호출하였을 때, A함수가 B함수의 결과값을 기다리냐의 여부
1. 블로킹 vs 논 블로킹
1). 블로킹
- A함수가 B함수를 호출하였을 때, B함수에게 제어권을 넘겨주고 자신은 제어권이 없어 실행을 멈추고 제어권을 받기를 기다린다.
- B함수가 제어권을 받아 모두 처리한 후, 다시 제어권을 되돌려줌
- 폴링(: 하나의 프로그램의 충돌 회피, 동기호 처리등을 목적)에 가깝다.

2). 논 블로킹
- A함수가 B함수를 호출하고, 자신은 제어권을 그대로 가지고 있어 A함수와 B함수 모두 실행을 유지힌다.

2. 동기 vs 비동기
1). 동기
- 함수 A가 B 함수를 호출한 뒤, A 함수가 B함수의 리턴값을 계속 확인하면서 신경쓰는 것
2). 비동기
-
함수 A가 B 함수를 호출하면서 B함수에게 콜백함수를 함께 전달하여, A함수는 B함수의 처리완료 여부를 신경쓸 필요가 없다.
-
비동기는 병렬처리에 가깝다.
3. 동기 와 블로킹 비교
1). 동기 + 블로킹
- A함수가 B함수에게 제어권을 넘겨 줌과 동시에 A함수는 B의 리턴값을 필요로 한다.
- B의 함수가 끝나면 B의 리턴값과 제어권을 함께 넘겨받아 처리

2). 동기 + 논 블로킹
- A함수는 B함수를 실행하면서 제어권을 주지않고 서로 각 스레드로 실행하며 A함수는 지속적으로 B함수에게 처리 완료 여부를 묻는다.

3). 비동기 + 논블로킹
-
A함수는 B함수에게 제어권을 주지않고 각 스레드로 실행하며 A함수 또한 B함수의 처리여부를 신경쓰지 않고 콜백함수를 넘겨주며 B함수가 처리되면 A함수의 콜백함수를 실행한다.
-
콜백(: 함수 안에서 실행되는 또 다른 함수)
