동기/비동기 && 블로킹/논블로킹
🙉

동기/비동기 && 블로킹/논블로킹

Created
Jan 17, 2024 05:42 AM
Last edited time
Last updated January 23, 2024
Tags
CS
Language
URL
💡
동기/비동기는 요청한 작업에 대해 완료 여부를 신경 써서 작업을 순차적으로 수행할지 아닌지에 대한 관점이고,블로킹/논블록킹은 단어 그대로 현재 작업이 block(차단, 대기) 되느냐 아니냐에 따라 다른 작업을 수행할 수 있는지에 대한 관점이다.
 

동기(Synchronous) / 비동기 (Asynchronous)

동기

요청한 작업에 대해 완료 여부를 따져 순차적으로 처리

비동기

요청한 작업에 대해 완료 여부를 따지지 않고 자신의 다음 작업 수행

성능 이점

요청한 작업의 완료 여부를 신경 쓰지 않기 때문에 I/O 작업과 같은 느린 작업이 발생할 때, 다른 작업을 처리하기 때문에 전반적인 시스템 성늘 향상에 도움을 준다.
 

작업 순서 차이

💡
동기는 말 그대로 1 → 2 → 3 과 같이 순서대로 작업이 이루어진다. 하지만 비동기는 순서가 보장되지 않는다.
 

Blocking / Non-Blocking

💡
다른 요청의 작업을 처리 하기 위해 현재 작업을 block 하는지 안하는지의 차이이다.

Blocking

현재 작업의 제어권을 넘기고 제어권을 가져간 작업이 끝나면 제어권을 돌려 받는다. 현재 작업의 진행을 Block 한다고 생각하자.

Non-Blocking

현재 작업의 제어권을 넘기지않고 다른 작업을 실행. 현재 작업의 진행을 Non-Block 한다고 생각하자.
 

동기/비동기 + Blocking/Non-Blocking 조합

notion image

Sync Blocking(동기 + 블록킹)

  • 다른 작업이 진행되는 동안 자신의 작업을 처리하지 않고(Blocking), 다른 작업의 완료 여부를 바로 받아 순차적으로 처리하는 방식이다(Sync).
  • 다른 작업의 결과가 자신의 작업에 영향을 주는 경우 활용할 수 있다.

Async Blocking(비동기 + 블록킹)

  • 다른 작업이 진행되는 동안 자신의 작업을 중단(Blocking)하고, 다른 작업의 결과를 바로 처리하지 않아 순서대로 작업을 수행하지 않는(Async) 방식이다.
  • 흔하지 않은 방식이다.
  • Sync Blocking 과 크게 달라보이지 않는데, 실제로 성능도 차이가 없다.
  • Node.js + MySQL 의 조합으로 사용이 된 사례가 있긴하다.

Sync Non-Blocking(동기 + 논블록킹)

  • 다른 작업이 진행되는 동안에도 자신의 작업을 처리(Non-Blocking), 다른 작업의 결과를 바로 처리하여 작업을 순차대로 수행(Sync)하는 방식
  • 자신의 작업중에도 다른 작업이 끝났는지 계속 확인하는 방식이라 생각하면 간단하다.
  • 게임 로딩창에서 현재 로딩경과를 알려주는 부분을 예시로 생각할 수 있다.

Async Non-Blocking(비동기 + 논블록킹)

  • 다른 작업이 진행되는 동안에도 자신의 작업을 처리하고(Non-Blocking), 다른 작업의 결과를 바로 처리하지 않아 작업 순서가 지켜지지 않는 방식(Async)이다.
  • 다른 작업의 결과가 자신의 작업에 영향을 주지 않는 경우에 활용할 수 있다.
  • 예시
    • 웹브라우저의 파일 다운로드 → 다운로드 중에도 다른 요청 가능.
 
 

출처

Loading Comments...