동기와 비동기, 블로킹과 논블로킹 혼합 사용

Better late than never·2023년 5월 9일
0

동기처리와 비동기, 블로킹과 논블로킹처리 혼합하여 사용할 시

이 개념들이 서로 뭔가 연관이 있는 것으로 오해하기 쉽다. 아무래도 동기와 블록킹, 비동기와 논블록킹의 작동 매커니즘이 더 직관적이기 때문에 많은 사람들이 이 개념들을 같은 것 혹은 비슷한 것으로 오해하고 있는데, 이 두가지 개념은 서로 전혀 다른 곳에 초점을 맞춘 개념들이므로 서로 직접적인 관련은 거의 없다고 봐도 된다. 단지 조합하여 사용되는 것 뿐

동기와 비동기는 프로세스의 수행 순서 보장에 대한 매커니즘이고 

블록킹과 논블록킹은 프로세스의 유휴 상태에 대한 개념으로 완전한 별개의 개념

Sync-Blocking

동기를 블로킹처럼 처리

a는 b의 리턴 값을 필요(동기), 그래서 제어권을 b에게 넘겨주고 b가 실행을 완료하여 리턴 값과 제어권을 돌려줄 때까지 기다린다(블로킹)

Sync-Nonblocking

동기를 논블로킹처럼 처리

a는 b를 호출, 이 떄 a는 b에게 제어권을 주지 않고 자신의 코드를 계속 실행(논블로킹)

그런데 a는 b의 리턴 값이 필요하기 떄문에 중간 중간 b에게 함수 실행을 완료했는지 물어본다(동기)

논블로킹인 동시에 동기

Async-Nonblocking

비동기 논블로킹처리

a는 b를 호출, 이 떄 제어권을 b에게 주지 않고 자신이 계속 가지고 있는다(논블로킹)

따라서 호출 후 자신의 코드를 계속 실행. 또한 b를 호출 시 콜백함수를 함께 주는데 b는 자신의 작업이 끝나면 a가 준 콜백 함수를 실행(비동기)

Async-blocking

비동기를 블로킹처리(쓸 일이 거의 없음)

a는 b 리턴 값을에 신경쓰지 않고, 콜백함수를 보낸다(비동기) 그런데 b의 작업에 관심없음에도 불구하고 a는 b에게 제어권을 넘긴다(블로킹)

따라서 a는 자신과 관련 없는 b의 작업이 끝날 때 까지 기다린다?…

  • Async-blocking의 경우 sync-blocking과 성능의 차이가 또이또이하기 때문에 사용하는 경우는 거의 없다

0개의 댓글