ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [운영체제] 동기(sync) vs 비동기(async), 블로킹(Blocking) vs 논블로킹(Non-Blocking)
    운영체제 2023. 11. 8. 22:57

     

     

    동기 vs 비동기 !=  블로킹 vs 논블로킹

     

     

     

     

     

    동기와 비동기 개념과 블로킹과 논블로킹은 혼용하여 사용하는 경우가 있지만 엄연히 서로 다른 개념입니다. 

    일반적으로 동기는 블록킹 방식이며 비동기는 논블록킹 방식만 사용한다고 오해하곤 합니다. 그러나 두 개념은 서로 구분하는 관점이 다르기 때문에 동기/ 논블록킹, 비동기/블록킹 방식도 가능합니다.

     

    • 동기 vs 비동기 : 처리해야 할 작업들을 어떠한 '흐름'으로 처리 할 것인가에 대한 관점
    • 블로킹 vs 논블로킹 : 이벤트가 발생한 경우, 처리되어야 하는 작업이 '제어권'을 넘겨받는 지에 대한 관점

     

     

     

     

    동기 (sync) vs 비동기 (async)

     

     

    위에서 설명했듯이 동기와 비동기를 구분하는 기준은 작업의 흐름입니다. 

    동기 방식은 순차적으로 진행되며 작업 A가 완료될 때까지 다른 작업들은 대기합니다. 각 작업은 동시에 진행될 수 없으며 하나의 작업이라도 실행 중이라면 다른 작업은 대기해야 합니다. 반면 비동기 방식은 작업 A와 다른 작업들이 동시에 실행됩니다. 작업 A와 작업 B는 별개의 작업으로 다른 작업의 실행 여부와 관계없이 각각의 작업이 실행될 수 있습니다.

     

     

     

     

     

    블로킹 (Blocking)  vs  논블로킹 (Non-Blocking)

    블로킹과 논블록킹은 작업의 제어권을 누가 가지고 있는지에 따라 구분되는 개념입니다.

     

    블로킹은 작업을 실행하는 중에 다른 작업이 호출된다면 제어권을 넘겨주고, 제어권을 받은 작업이 끝나면 다시 기존에 실행되던 작업에게 제어권을 돌려주는 방식을 의미합니다. 기존의 작업은 제어권이 없기 때문에 실행 중이던 작업을 지속할 수 없습니다. 반대로 논블록킹다른 작업이 호출되더라도 제어권을 넘겨주지 않습니다. 보다 정확히 설명하자면 다른 작업을 호출할 때 제어권을 넘겨주지만 바로 돌려받기 때문에 기존 작업을 그대로 실행할 수 있습니다.

     

     

     

     

     

     

     

    동기 (sync) / 논블로킹 (Non-Blocking),  비동기 (async) / 블로킹 (Blocking) 

     

     

     

     

    다른 작업이 호출되더라도 기존의 작업이 실행이 가능한지를 기준으로 보자면 Blocking과 Synchronous 둘이 비슷하고, Non-blocking과 Asynchronous도 비슷합니다. 때문에 위와 같이 구체적인 예를 쉽게 찾아볼 수 있습니다. 그러나 이 두 방식 외에도 Synchronous와 Non-blocking,  Asynchronous와 Blocking 방식도 가능합니다.

     

     

     

     

     

     

     

     

    어느 카페에 사장님과 아르바이트생 2명이 있다고 가정해 보겠습니다. 

    Synchronous / Blocking

    사장 : (아르바이트생 1에게) 식기 좀 닦아주세요.
    사장 : (아르바이트생 1이 일을 끝낼 때까지 감시한다.)
    아르바이트생 1 : 사장님. 다 했어요.
    사장 : (아르바이트생 2에게) 매장 청소 좀 해주세요.
    사장 : (아르바이트생 2가 일을 끝낼 때까지 감시한다.) 
    아르바이트생 2 : 사장님. 청소 끝냈습니다.

     

    Asynchronous / Blocking

    사장 : (아르바이트생 1에게) 식기 좀 닦아주세요.
    아르바이트생 1 : 사장님. 다 할 때까지 거기 계세요!!
    사장 : (아르바이트생 1이 일을 끝낼 때까지 기다린다.) 
    아르바이트생 1 : 다 했습니다. 이제 가보셔도 돼요!
    사장 : (아르바이트생 2에게) 매장 청소 좀 해주세요.
    아르바이트생 2 : 네! 사장님 거기서 기다려주세요!
    사장 : (아르바이트생 2가 청소를 끝낼 때까지 기다린다.) 

     

     

    Synchronous / Non-Blocking

    사장 : (아르바이트생 1에게) 매장 청소 좀 해주세요.
    아르바이트생 1 : 네! 
    아르바이트생 1 : (청소 중...)
    사장 : 청소 다 하셨나요??
    아르바이트생 1 : 아직이요. (청소 중...)
    사장 : 청소 다 하셨나요??
    아르바이트생 1 : 아직이요. (청소 중...)
    사장 : 청소 다 하셨나요??
    아르바이트생 1 : 아직이요. (청소 중...)
    사장 : 청소 다 하셨나요??
    아르바이트생 1 : 네! 다 했습니다.

     

    Asynchronous / Non-Blocking

    사장 : (아르바이트생 1에게) 식기 좀 닦아주세요.
    사장 : (아르바이트생 2에게) 매장 청소 좀 해주세요.
    사장 : (정산을 한다.)
    아르바이트생 1 : 사장님. 다 했습니다!
    사장 : 수고했어요! (정산을 마저 한다.)
    아르바이트생 2 : 사장님. 청소 다 했습니다~
    사장 : 수고했어요!

     

     


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

    https://wildeveloperetrain.tistory.com/104

     

Designed by Tistory.