동기&비동기
호출되는 함수의 작업 완료 여부를 신경쓰냐에 따라, 함수 실행/리턴 순차적인 흐름을 따르느냐, 안따르느냐가 관심사입니다.
예시는 실생활 청소로 비유해서 설명을 해보겠습니다.
동기(Sync)
호출하는 함수 A가 호출되는 함수 B의 작업 완료 후 리턴을 기다리거나, 바로 리턴 받더라도 미완료 상태이라면 작업 완료 여부를 스스로 계속 확인합니다.
예시)
1. 세탁기를 돌린다.
2. 세탁기가 시작했다는 알림을 준다.
3. 세탁기가 작업이 완료될 때 까지 앞에서 기다린다.
4. 세탁기가 작업이 완료됬다는 알림을 주며 완료된 것을 확인한다.
5. 로봇청소기를 돌린다.
6. 로봇청소기가 시작했다는 알림을 준다.
7. 로봇청소기가 작업이 완료될 때 까지 앞에서 기다린다.
8. 로봇청소기가 완료됬다는 알림을 주며 완료된 것을 확인한다.
비동기(Async)
호출하는 함수 A가 함수 B를 호출할 때 콜백 함수를 함께 전달해서, 함수 B의 작업이 완료되면 함께 보낸 콜백 함수를 실행합니다. 함수 A는 함수 B를 호출한 후로 함수 B의 작업 완료 여부에는 신경쓰지 않습니다.
예시)
1. 세탁기를 돌린다.
2. 세탁기가 시작했다는 알림을 준다.
3. 로봇청소기를 돌린다.
4. 로봇청소기가 시작했다는 알림을 준다.
5. 세탁기가 완료됬다는 알림을 준다.
6. 로봇청소기가 완료됬다는 알림을 준다.
블로킹&논블로킹
처리되어야 하는 작업이, 전체적인 작업 '흐름'을 막느냐 안막느냐에 대한 관점 즉, 제어권이 누구한테 있느냐가 관심사입니다.
예시는 일을 비유해서 설명을 해보겠습니다.
블로킹
호출하는 함수 A는 B를 호출함과 동시에 제어권을 B에게 주고 작업이 멈춥니다. 그리고 B가 작업이 마치면 A에게 제어권을 돌려줘 A가 다시 작업을 시작합니다. (제어권이 A -> B -> A)
- A가 B에게 오늘 해야할 일을 지시하면서 자신의 펜을 빌려주었다.
- B가 오늘 해야할 일을 끝날때 까지 A는 펜이 없어서 대기를 한다.
- B가 일이 끝나면 펜을 A에게 돌려주고 A는 자신이 해야할 일을 시작한다.
논블로킹
호출하는 함수 A가 B를 호출하지만 제어권은 B에게 주지 않고 자기 자신이 가지고 있으며, 작업은 계속 진행됩니다. (제어권이 A -> A)
- A가 B에게 오늘 해야할 일을 지시한다.
- B는 오늘 해야할 일을 자신의 펜으로 시작하고 A 또한 자신의 펜으로 해야할 일을 시작한다.
동기&비동기, 블로킹&논블로킹 조합
동기&블로킹
호출하는 함수 A가 B를 호출할 때 제어권을 B에게 주고 작업이 멈춥니다. 그리고 B가 작업이 마치면 A에게 제어권과 완료여부를 돌려줘 A가 다시 작업을 시작합니다.
- 가장 많이 쓰이는 조합 중 하나입니다.
- 모든 실행과 흐름이 순차적이기 때문에 개발자가 프로그램을 제어하기가 편합니다.
동기&논블로킹
호출하는 함수 A가 B를 호출할 때 제어권은 주지 않고 계속 A의 작업을 진행합니다. 진행을 하면서 B에게 지속적으로 완료여부를 확인합니다.
비동기&블로킹
호출하는 함수 A가 B를 호출할 때 제어권과 콜백함수를 B에게 줍니다. 비록 B의 완료여부에는 관심이 없지만 제어권을 B에게 주었기 때문에 A는 작업을 하지 못하고 B가 제어권을 돌려주기 전 까지는 중단되었다가 제어권을 돌려받으면 다시 작업을 시작합니다.
비동기&논블로킹
호출하는 함수 A가 B를 호출할 때 콜백함수를 B에게 줍니다. 제어권을 주지 않았기 때문에 A의 작업은 계속 진행되고 B함수는 작업이 완료되면 A가 준 콜백함수를 실행합니다.
- 가장 많이 쓰이는 조합 중 하나입니다.
- 성능과 자원의 효율면에서 가장 우수합니다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
equals() (0) | 2025.02.16 |
---|---|
System.out.print (0) | 2025.02.16 |
Garbage Collection(GC) (0) | 2025.02.16 |
Comparable, Comparator (0) | 2025.02.16 |
Optional 개념 및 사용법 (2) | 2025.02.16 |