ETC

동기와 비동기 그리고 블로킹과 논블로킹

zamezzz 2022. 6. 13. 15:19

동기와 블로킹, 비동기와 논블로킹에 대해 헷갈리는 경우가 있습니다.

하지만 자세히 보면 두 개념은 기준이 다른 개념입니다.

간단한 설명과 함께 각 개념을 정리해보겠습니다.

먼저 설명에 앞서 아래와 같이 함수명을 정의하고 시작하겠습니다.
- 요청한 함수 : Func A
- 요청된 함수 : Func B


먼저 동기와 비동기에 대한 설명입니다.


동기 (Sync)
- Func A가 Func B를 요청하고 작업이 완료되었는지 계속 확인
- 결과가 주어질 때까지 대기해야 한다

비동기 (Async)
- Func A는 요청 후 신경 쓰지 않고 다른 작업을 계속 처리 할 수 있음
- Func B가 작업을 마치면 Call back 으로 알려줌 

동기와 비동기의 가장 큰 차이점은 완료여부를 확인하는 주체의 차이로 볼 수 있습니다.
- Func B의 작업 완료여부 체크를 어디서 하는지 차이
- 결과를 받을 때까지 Func A가 다른 작업을 처리할 수 있는지 차이 


다음은 블로킹과 논블로킹에 대한 설명입니다.

블로킹 (Blocking)
- Func A가 Func B를 요청하면 제어권을 Func B에게 넘겨줌
- 이후 Func B가 동작하고 Func A는 그 동안 멈춰있게 된다
- 작업을 완료한 Func B는 제어권을 다시 Func A에게 반환하고 Func A는 다시 작업을 시작
- 작업이 순차적으로 이루어짐


논블로킹 (Non-Blocking)
- Func B의 동작이 완료되지 않았더라도 Func A에게 제어권을 바로 넘겨줌.
- 그 동안 Func A는 다른 작업을 할 수 있음
- 리소스 낭비 시간이 줄어들어, 리소스를 효율적으로 사용할 수 있음

블로킹과 논블로킹의 가장 큰 차이점은 제어권입니다.
제어권 처리 방식에 따라서 구분되며, 제어권을 언제 넘겨주느냐의 차이가 있습니다.

이상으로 동기, 비동기, 블로킹, 논블로킹에 대하 정리해보았습니다.
감사합니다.

반응형