[운영체제] Synchronous and Asynchronous, Blocking and Non-blocking

김성록·2023년 3월 20일
0

운영체제

목록 보기
9/14

동기와 비동기, blocking과 non-blokcing에 대해 설명해보세요.


Synchronous(동기) vs Asynchronous(비동기)

  • 시간의 관점에서, 현재 작업의 응답과 다음 작업의 요청이 동시에 일어나면 동기, 동시에 일어나지 않으면 비동기이다.

Synchronous

  • 현재 작업의 응답이 끝남과 동시에 다음 작업이 요청된다.

  • 함수를 호출하는 곳에서 호출되는 함수가 결과를 반환할 때까지 대기한다.

  • 작업 완료 여부를 계속해서 확인한다.

Asynchronous

  • 현재 작업의 응답이 끝나지 않은 상태에서 다음 작업이 요청된다.

  • 함수를 호출하는 곳에서 결과를 기다리지 않고, 다른 함수(callback)에서 결과를 처리한다.

  • 작업 완료 여부를 확인하지 않는다.


Blocking vs Non-blocking

  • 제어권의 관점에서, 호출된 함수가 자신의 작업이 모두 끝날 때까지 제어권을 가지고 있어서 호출한 함수가 대기하도록 하면 Blocking, 호출된 함수가 바로 return해서 호출한 함수에게 제어권을 주어 다른 일을 할 수 있도록 하면 Non-blocking이다.

Blocking

  • 제어권이 호출된 함수에게 넘어가서 호출된 함수 내에서 작업이 모두 끝난 후, 호출한 함수에게 다시 제어권이 넘어간다.

  • 작업이 완료된 후 새로운 작업을 수행할 수 있다.

Non-blocking

  • 제어권이 계속 호출한 함수에게 있어서 작업의 완료 여부와 상관 없이 새로운 작업을 수행할 수 있다.

Synchronous vs Blocking

  • 둘 다 시스템의 반환을 기다린다는 측면에서 같은 개념이다.

  • 하지만 시스템의 반환을 기다리는 동안

    • Waiting Queue에 머무는 것이 필수가 아니면 Synchronous

    • Waiting Queue에 머무는 것이 필수이면 Blocking


Asynchronous vs Non-blocking

  • System call이 반환될 때

    • 실행된 결과와 함께 반환되면 Asynchronous

    • 실행된 결과와 함께 반환되지 않으면 Non-blocking


Sync/Async와 Blocking/Non-blocking의 조합

  • Synchronous + Blocking
    : 가장 많이 쓰이는 조합 중 하나이다. 모든 실행과 흐름이 순차적으로 진행되기 때문에 개발자가 프로그램을 제어하기 쉽다. Blocking 방식이므로 호출되는 함수에게 제어권이 넘어가서 다른 일을 못하고 대기해야 한다.

  • Synchronous + Non-blocking
    : Non-blocking 방식이므로 호출한 함수는 다시 제어권을 받지만 순차적으로 진행되어야 하기 때문에 계속적으로 작업이 완료되었는지 물어보는 일(Polling)을 추가로 수행한다.

  • Asynchronous + Blocking
    : 특별한 장점이 없이 가장 비효율적인 조합이다. 순차적으로 진행되지 않아도 되지만 제어권이 넘어갔기 때문에 결국 다른 일을 못하고 대기해야 한다. Asynchronous Non-blocking 모델 중에서 프로그래머의 실수로 Asynchronous blocking으로 동작하는 경우가 있다. Node.js(Async) + MySQL(Blocking)의 조합이 대표적이다.

  • Asynchronous + Non-blocking
    : 가장 많이 쓰이는 조합 중 하나이다. 순차적으로 진행되지 않아도 되며, Non-blocking 방식이므로 제어권을 바로 돌려받는다. 따라서 다른 작업의 완료 여부와 상관 없이 다른 작업을 할 수 있다. 성능과 자원의 효율면에서 가장 유리한 모델이다.

profile
예비 개발자

0개의 댓글