Blocking vs Non Blocking IO / Synchronous vs Asynchronous IO

ian·2023년 1월 20일
1

Blocking/NonBlocking

호출된 함수의 제어권과 관련이 있다.
호출되는 함수가 언제 return 되는지가 관심사 (제어권)

Blocking: 호출된 함수가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지고서 호출한 함수에게 바로 return 하지 않으면 블럭이다.

Non-Blocking: 호출된 함수가 자신이 할 일을 마치지 않았더라도 바로 제어권을 바로 return하여 호출한 함수가 다른 일을 진행할 수 있도록 하면 논블럭이다.

Synchronous/Asynchronous

작업 완료를 누가 처리하는가, 누가 신경쓰는가가 이 두 개념의 관심사

Synchronous: 호출한 함수에서 작업 완료를 신경
요청을 하면 (바로) 응답을 받는다는 의미. 말 그대로 동시에 일어난다는 뜻. 요청과 그 결과가 동시에 일어난다는 약속. 바로 요청을 하면 시간이 얼마가 걸리던지 요청한 자리에서 결과가 주어져야 한다.

Asynchronous: 호출된 함수가 작업의 완료를 callback을 통해 전달
동시에 일어나지 않는다를 의미. 요청과 결과가 동시에 일어나지 않을거라는 약속이다. 요청과 응답이 다른 시간대 존재하기 때문에, 요청내용에 대해 지금 바로 혹은 당장 응답받지 않아도 된다
특정 로직의 실행이 끝날 때까지 기다려주지 않고 나머지 코드를 먼저 실행하는 것이 비동기 처리이다.

비동기방식은 동기보다 복잡하지만 결과가 주어지는데 시간이 걸리더라도 그 시간 동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있는 장점이 있다.

페이지 리로드의 경우, 전체 리소스를 다시 불러와야하는데 이미지, 스크립트 , 기타 코드등을 모두 재요청할 경우 불필요한 리소스 낭비가 발생하게 되지만 비동기식 방식을 이용할 경우 필요한 부분만 불러와 사용할 수 있으므로 매우 큰 장점이 있다.
(AJAX)


Synchronous & Blocking

  • 함수가 반환되지 않는 동안 프로세스는 봉쇄되어 대기하고 있으며 다른 프로세스를 진행할 수 없다

Synchronous Non-Blocking I/O

  • 여러 프로세스를 동시에 작업할 수 있다
  • 데이터가 준비되기 전에는 유저 프로세스와 커널이 바쁘게 순환해야한다(busy wait)점]

Asynchronous Blocking I/O

  • Synchronous Non-Blocking I/O 모델의 busy wait 문제를 해결할 수 있는 모델

Asynchronous Non-Blocking I/O

  • 커널의 데이터 상태에 제약 없이 다른 프로세스를 작업
  • 데이터가 준비되면 커널이 이벤트 핸들러를 통해 콜백 함수를 호출


https://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/

profile
Backend Developer

0개의 댓글