동기/비동기 vs 블로킹/논블로킹

bagt13·2022년 11월 19일
0

CS

목록 보기
2/14
post-thumbnail

  • 동기/비동기 : 프로세스의 수행 순서 보장에 대한 매커니즘
  • 블록킹/논블록킹 : 프로세스의 유휴 상태에 대한 개념이다.

비슷해 보이지만 이 두 개념은 완전히 다른 것이다.


동기 / 비동기

호출되는 함수의 작업 완료 여부를 기다리는지에 따라, 함수 실행/리턴 순차적인 흐름을 따르는지에 초점이 맞춰져있다.



✅ 동기 (Synchronous)

호출하는 함수 A호출되는 함수 B의 작업 완료 후 리턴을 기다리거나, 바로 리턴 받더라도 미완료 상태이라면 작업 완료 여부를 스스로 계속 확인하는 것이다.


✅ 비동기 (Asynchronous)

호출하는 함수 A가 호출되는 함수 B를 호출할 때 callback 함수를 함께 전달해서, 함수 B의 작업이 완료되면 함께 보낸 콜백 함수를 실행한다.

함수 A는 함수 B를 호출한 후로 함수 B의 작업 완료 여부에는 신경쓰지 않는다.




블로킹 / 논블로킹

처리되어야 하는 작업이, 전체적인 작업 흐름을 막느냐 안막느냐에 초점이 맞춰져있다. 즉, 제어권이 누구한테 있느냐가 관심사이다.



✅ 블로킹 (Blocking)

호출하는 함수 A가 호출되는 함수 B를 호출하면, 제어권을 B에게 넘겨준다.

제어권을 넘겨받은 B가 함수를 실행할 동안, A는 제어권이 없기 때문에 함수 실행을 멈춘다. B 함수의 실행이 끝나야 A 함수가 재개된다.


✅ 논블로킹 (Non-Blocking)

A 함수가 B 함수를 호출해도 제어권은 그대로 자신이 가지고 있는다.

따라서 B 함수를 호출하고도 계속 A 함수를 실행할 수 있다.



✅ 실제 사용 예시

동기/비동기와 블로킹/논블로킹은 다른 개념이기 때문에 조합되어 사용되는 경우를 볼 수 있다.


  • 예를 들어, 자바의 Scanner동기 + 블로킹이라고 볼 수 있다.
    제어권이 시스템에서 사용자로 넘어가고(블로킹), 사용자가 입력을 완료해야한 다음 작업을 수행(동기)하기 때문이다.
  • 또한 프론트엔드에서의 AJAX 요청비동기 + 논블로킹이다. 서버에 API 요청을 보내고, 응답을 기다리지 않고 다음 일을 수행할 수 있다.



참고 자료
https://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/

profile
주니어 백엔드 개발자입니다😄

0개의 댓글