[운영체제] 동기와 비동기, Blocking 과 Non-Blocking

Narcoker·2023년 6월 19일
0

운영체제

목록 보기
9/13

동기와 비동기

동기

어떤 작업을 요청했을 때 그 작업이 종료될 때까지 기다린 후 다음 작업을 동작한다.

데이터를 주고받는 '순서'가 중요할때 사용된다.

요청한 작업만 처리하면 되기 때문에 전체적인 수행 속도는 빠를 수 있다. (일만 하면 된다)

한 작업에 대한 시간이 길어질 경우, 전체 응답이 지연될 수 있다.

비동기

어떤 작업을 요청했을 때 그 작업이 종료될 때까지 기다리지 않고(작업을 위임하고), 다음 작업을 동작한다.
요청했던 작업이 끝나면 결과를 받고, 그에 따른 추가 작업이 있다면 수행한다.

요청 순서에 상관없이, 동시에 다수의 작업을 처리할 수 있다.

작업이 끝날 때 따로 이벤트를 감지하고 결과를 받아 그에 따른 추가 작업을 해줘야하기 때문에,
비교적 느릴 수 있다.

I/O 작업이 잦고, 빠른 응답속도를 요구하는 프로그램에 적합하다.

Blocking 과 Non-Blocking

Blocking

블로킹은 특정 작업이 완료될 때까지 프로그램 실행이 멈춰 있는 상태를 말한다.

예를 들어, 파일을 읽어들이는 동안에는
다른 작업을 처리하지 못하고 기다리게 되는 상황이 블로킹 상황이다.

Non-Blocking

논블로킹은 특정 작업의 완료 여부와 상관없이 다른 작업을 계속해서 진행할 수 있는 상태를 말한다.

논블로킹 상황에서는 파일을 읽어들이는 동안에도 다른 작업을 동시에 처리할 수 있다.

동기/비동기 상황에서의 Blocking, Non-Blocking

동기

Blocking

Blocking 과 Non-Blocking 에서 언급한 Blocking 과 동일하다.

특정 작업이 완료될 때까지 프로그램 실행이 멈춰 있는 상태 를 말한다.

즉 제어권을 특정 작업이 완료될 때까지 돌려받지 못한다.
제어권을 돌려받을때 결과값을 동시에 반환 받는다.

Non-Blocking

동기적인 방식을 유지하면서 Blocking을 피한다.

즉 제어권을 특정 작업에게 잠깐 줬다가 바로 돌려받는다.
결과 값은 작업이 끝나면 돌려받는다.

가능한 시나리오 중 하나로
작업이 즉시 완료되지 않는 경우에 루프문을 통해 계속 상태를 확인한다.
이 방식은 CPU 시간을 낭비할 수 있다.

비동기

Non-Blocking

Blocking 과 Non-Blocking 에서 Non-Blocking 과 동일하다.

특정 작업의 완료 여부와 상관 없이 다른 작업을 계속해서 진행할 수 있는 상태를 말한다.

Blocking

비동기 상황 속에서 Blocking 방식을 사용한다.

비동기 함수를 실행했음에도 불구하고 이 함수의 동작이 끝날 때 까지 기다리는 상태를 말한다.

profile
열정, 끈기, 집념의 Frontend Developer

0개의 댓글