CS

[OS] 블로킹 논블로킹(Blocking / Non-Blocking), 동기 비동기( Sync / Async)

KJihun 2023. 10. 5. 17:44
728x90

 

 

동기 블로킹은 단지 조합하여 사용되는 것 뿐 전혀 다른 개념

 

  • Blocking / Non-Blocking
      • 블로킹, 논블로킹 : 제어권(함수실행권)을 언제 넘겨주느냐의 차이
      • 블로킹 : 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것
        1. A함수가 B함수를 호출하면 B에게 제어권을 넘긴다.
        2. 제어권을 넘겨받은 B는 열심히 함수를 실행한다. A는 B에게 제어권을 넘겨주었기 때문에 함수 실행을 잠시 멈춘다.
        3. B함수는 실행이 끝나면 자신을 호출한 A에게 제어권을 돌려준다.
      • 논블로킹 : 다른 주체의 작업에 관련없이 자신의 작업을 하는 것
        • A함수가 B함수를 호출하면, B 함수는 실행되지만, 제어권은 A 함수가 그대로 가지고 있는다.
        • A함수는 계속 제어권을 가지고 있기 때문에 B함수를 호출한 이후에도 자신의 코드를 계속 실행한다.

 

  •  Synchronous / Asynchronous
    • 동기(Sync, 싱크) 와 비동기(Async, 어싱크) : 요청받은 함수가 작업을 완료했는지를 체크
      • 동기(Sync, 싱크) : 요청자가 작업 완료 여부를 계속해서 확인
        • 현재 작업의 응답이 끝남과 동시에 다음 작업이 요청된다.
        • 함수를 호출하는 곳에서 호출되는 함수가 결과를 반환할 때까지 기다린다.
      • 비동기(Async, 어싱크) : 함수 요청 시 콜백 함수 함께 전달, 이후 요청자는 작업 완료 여부를 확인하지 않고 요청받은 함수가 작업을 마치면 콜백 함수를 실행해 알려줌
        • 현재 작업의 응답이 끝나지 않은 상태에서 다음 작업요청된다.
        • 함수를 호출하는 곳에서 결과를 기다리지 않고, 다른 함수(callback)에서 결과를 처리한다.

 

 

 

  • 동기 - 비동기 and 블로킹, 논블로킹
    • —A함수가 B 함수 호출 시—
    • Sync-Blocking
      1. 함수 A는 함수 B의 리턴값을 필요로 함 (동기)
      2. 제어권을 함수 B에게 넘겨주고, 함수 B가 실행을 완료하여 리턴값과 제어권을 돌려줄때까지 대기 (블로킹)
    • Sync-Nonblocking
      1. A 함수는 B 함수에게 제어권을 주지 않고, 자신의 코드를 계속 실행(논블로킹)
      2. A 함수는 B 함수의 리턴값이 필요하기 때문에, 중간중간 B 함수에게 함수 실행을 완료했는지 확인 (동기)
    • Async-Nonblocking
      1. A함수는 호출 시 콜백함수를 함께 전달, 제어권은 주지 않고 자신이 계속 가져 자신의 코드 계속 실행(논블로킹)
      2. B 함수는 자신의 작업이 끝나면 A 함수가 준 콜백 함수를 실행(비동기).
    • Async-blocking : sync-blocking과 성능의 차이가 또이또이하기 때문에 사용하는 경우는 거의 없다(몰라도됨)
      1. A 함수는 리턴값에 신경쓰지 않고, 콜백함수를 보냄(비동기)
      2. B 함수의 작업에 관심없음에도 불구하고, A 함수는 B 함수에게 제어권을 넘김 (블로킹)
      3. 따라서, A 함수는 자신과 관련 없는 B 함수의 작업이 끝날 때까지 기다려야 한다.
      • 일부러 사용하는 경우는 없으나 의도치 않게 사용되는 조합
      • Node.js(비동기) + MySQL(블로킹)의 조합이 대표적인 예시
      • Node.js에서 비동기(async)적으로 DB 작업을 수행하더라도 블로킹 방식으로 작동하는 MySQL 드라이버를 거치게 됨