[ 백엔드 면접 준비 ] 블로킹 vs 논블로킹 // 동기 vs 비동기
∇ 백엔드 면접 준비 : 블로킹vs논블로킹 // 동기 vs 비동기
목 차
1. Blocking(블로킹) & Non-blocking(논블로킹)
2. Synchronous(동기) & Asynchronous(비동기)
3. 비교.
0. Intro.
- Block & non-block , sync-async 개념을 이해하기 위해서는 다음 두가지 용어를 먼저 짚어야 한다고 합니다.
◆ 제어권.
○ 제어권은 자신(함수)의 코드를 실행할 권리 같은 것.
- 제어권을 가진 함수는 자신의 코드를 끝까지 실행한 후, 자신을 호출한 함수에게 돌려줍니다.
◆ 결과값을 기다린다는 것.
○ A함수에서 B 함수를 호출했을 때, A 함수가 B 함수의 결과값을 기다리느냐의 여부를 의미합니다.
Ⅰ. Blocking(블로킹) & Non-blocking(논블로킹)
※ 블로킹과 논블로킹은 'A함수'가 'B함수'를 호출했을 때,
제어권을 어떻게 처리하느냐에 따라 달라집니다.
1) 블로킹 (Blocking )
:: '블로킹'은 A 함수가 B 함수를 호출하면, 제어권을 A가 호출한 B 함수에 넘겨줍니다.
1. 'A 함수' 가 'B 함수' 를 호출하면, B에게 제어권을 넘겨줍니다.
2. 제어권을 넘겨받은 B는 열심히 함수를 실행합니다.
A는 B에게 제어권을 넘겨주었기 때문에 함수 실행을 잠시 멈춥니다.
3. B 함수는 실행이 끝나면, 자신을 호출한 A에게 제어권을 돌려줍니다.
2) 논-블로킹 (Non-Blocking )
:: '논-블로킹'은 A 함수가 B 함수를 호출해도 제어권은 그대로 자신이 가지고 있습니다.
1. A 함수가 B 함수를 호출하면, B 함수는 실행되지만, 제어권은 A 함수가 그대로 가지고 있습니다.
2. A 함수는 계속 제어권을 가지고 있기 때문에
B 함수를 호출한 이후에도 자신의 코드를 계속 실행합니다.
Ⅱ. Synchronous(동기) & Asynchronous(비동기)
※ 동기와 비동기의 차이는
호출되는 함수의 작업 완료 여부를 신경쓰는지의 여부의 차이입니다.
1) 동기(Synchronous)
- 함수 A가 함수 B를 호출한 뒤, 함수 B의 리턴값을 계속 확인하면서 신경쓰는 것이 '동기' 입니다.
2) 비동기(Asynchronous)
- 함수 A가 함수 B를 호출한 때 콜백 함수를 함께 전달해서,
함수 B의 작업이 완료되면 함께 보낸 콜백 함수를 실행합니다.
- 함수 A는 함수 B를 호출한 후로,
함수 B의 작업 완료 여부에는 신경쓰지 않고 본인의 코드를 진행합니다.
Ⅲ. 블로킹/논블로킹 - 동기/비동기 비교.
1) Sync - Blocking.
:: '동기'를 '블로킹'처럼 실행하는 것.
√ 함수 A는 함수 B의 리턴값을 필요로 합니다. ("동기")
√ 제어권을 함수 B에게 넘겨주고,
함수 B가 실행을 완료하여 리턴값과 제어권을 돌려줄때까지 기다립니다(블로킹)
* 블로킹인 동시에 동기
2) Sync - NonBlocking.
:: '동기'를 '논블로킹'처럼 작동시킬 수 있습니다.
√ 함수 A는 함수 B를 호출합니다.
이 때 A 함수는 B 함수에게 제어권을 주지 않고, 자신의 코드를 계속 실행합니다 ( 논블로킹 )
√ A함수는 B함수의 리턴값이 필요하기 때문에,
중간중간 B함수가 함수 실행을 완료했는지 체크합니다 (동기)
* 논블로킹인 동시에 동기
3) Async - NonBlocking.
√ 함수 A는 함수 B를 호출합니다.
√ 이 때 제어권을 B 함수에 주지 않고, A함수 자신이 계속 가지고 있습니다 (논블로킹)
√ 그렇기에, B 함수를 호출한 이후에도 멈추지 않고 자신의 코드를 계속 실행합니다.
√ 또한 B 함수를 호출할 때 '콜백함수'를 함께 넘겨줍니다.
B함수는 자신의 작업이 끝나면, A 함수가 준 콜백 함수를 실행합니다. (비동기)
4) Async - Blocking.
√ 흔하지 않은 케이스.
√ A 함수는 B 함수의 리턴값에 신경쓰지 않고, 콜백함수를 보냅니다. (비동기)
√ 그런데, A는 B 함수의 작업에 관심이 없음에도 불구하고 B함수에게 제어권을 넘깁니다. (블로킹)
√ 따라서, A 함수는 자신과 관련 없는 B 함수의 작업이 끝날 때까지 기다려야 합니다.
'면접준비[프론트,백,데이터,CS] > InterView 준비 [ 백엔드 ]' 카테고리의 다른 글
[ 백엔드 면접준비 : Java&Kotlin + SpringBoot ] Java 면접 질문 정리_01 (0) | 2024.12.20 |
---|---|
[ 백엔드 면접 준비 ] 백엔드 면접 준비 _ 02. (0) | 2024.12.16 |
[ 백엔드 면접 준비 ] 백엔드 면접 준비 _ 01. (2) | 2024.12.13 |
[ 백엔드 면접 준비 ] REST & REST API & RESTfull API 란?? (2) | 2024.12.09 |