오늘의 인기 글
최근 글
최근 댓글
Today
Total
04-28 07:25
관리 메뉴

우노

Sync, Async, Blocking, Non-Blocking의 개념과 차이 본문

Network & Security/Concept

Sync, Async, Blocking, Non-Blocking의 개념과 차이

운호(Noah) 2024. 3. 8. 18:29

선요약

  • Sync / Async 는 호출된 함수의 종료를 호출한 함수가 처리하느냐, 호출된 함수가 처리하느냐의 차이입니다.
    • Sync
      • A 함수가 B 함수를 호출 할 때, B 함수의 결과를 A 함수가 처리하는 것입니다.
      • Sync 작업들이 연속적으로 실행될 땐, 작업의 순서가 유지됩니다.
    • Async
      • A 함수가 B 함수를 호출 할 때, B 함수의 결과를 B 함수가 처리하는 것입니다.
      • Async 작업들이 연속적으로 실행될 땐, 작업의 순서가 유지되지 않을 수 있습니다.
  • Blocking / Non-blocking 은 호출된 함수가 호출한 함수에게 제어권을 바로 주느냐 안주느냐의 차이입니다.
    • Blocking
      • A 함수가 B 함수를 호출 할 때, B 함수가 자신의 작업이 종료되기 전까지 A 함수에게 제어권을 돌려주지 않는 것입니다.
        • A 함수가 B 함수를 호출하면 B에게 제어권이 넘어갑니다.
        • 제어권을 넘겨받은 B는 함수를 실행합니다.
        • 이때 A는 B에게 제어권을 넘겨주었기 때문에 A 함수 실행을 잠시 멈춥니다. (Block)
        • B 함수가 실행이 끝나면 자신을 호출한 A에게 제어권을 돌려줍니다.
        • 제어권을 다시 받은 A 함수는 그다음 작업을 실행합니다.
    • Non-Blocking
      • A 함수가 B 함수를 호출 할 때, B 함수가 제어권을 바로 A 함수에게 넘겨주면서, A 함수가 다른 일을 할 수 있도록 하는 것입니다.
        • A 함수가 B 함수를 호출합니다.
        • 호출된 B 함수는 실행되지만, 제어권은 A 함수가 그대로 가지고 있습니다.
        • A 함수는 계속 제어권을 가지고 있기 때문에 B 함수를 호출한 이후에도 자신의 코드를 계속 실행합니다.

Sync, Async, Blocking, Non-Blocking 조합 별 예제

  • Sync, Blocking
    • 작업량이 적거나 작업 시간이 짧은 경우에 사용됩니다.
  • Async, Non-Blocking
    • 작업량이 많거나 작업 시간이 긴 경우에 사용됩니다.
  • Sync, Non-Blocking
    • 게임에서 맵을 이동할 때 맵 로딩율을 표시하는 경우 사용됩니다.
      • Non-Blocking이기 때문에 다른 작업을 진행할 수 있지만,
      • 다운로드 완료 여부를 지속적으로 확인하여 화면에 로드율을 표시합니다.
  • Async, Blocking
    • 실무에서 마주하기 쉽지 않은 경우이지만, 실제로 적용된 실무 사례가 있긴 합니다.
    • Node.js + MySQL의 조합이 대표적인데,
    • Node.js에서 비동기 방식으로 데이터베이스에 접근하기 때문에 Async 이지만,
    • MySQL 데이터베이스에 접근하기 위한 MySQL 드라이버가 Blocking 방식으로 작동되기 때문입니다.
      • JavaScript는 비동기 방식으로 MySQL에 쿼리를 보냅니다. (Async)
      • MySQL은 쿼리를 처리하면서 JavaScript에게 제어권을 넘겨주지 않습니다. (Blocking)
      • 그러면 JavaScript는 다른 작업을 계속 수행할 수 있지만, MySQL의 결과값을 필요로 하기 때문에 MySQL이 쿼리를 완료할 때까지 기다려야 합니다.
      • 결국 Sync Blocking과 작업 수행에 차이가 없게 됩니다.

Sync Blocking vs Sync Non-Blocking

  • 성능 차이는 상황에 따라 다르겠지만,
  • 일반적으로 Sync Non-Blocking이 Sync Blocking보다 효율적일 수 있습니다.
  • Sync Non-Blocking은 호출하는 함수가 제어권을 가지고 있어서 다른 작업을 병렬적으로 수행할 수 있기 때문입니다.

Async Blocking vs Sync Blocking

  • 개념적으로 차이가 있을 뿐이지 성능적으로 차이가 없습니다.
  • 보통 의도치 않은 경우에 사용됩니다.
  • 그래서 이 방식을 안티 패턴(anti-pattern)이라고 치부하기도 합니다.

참고

Comments