본문 바로가기

CS

동기와 비동기의 차이(블로킹, 넌블로킹)

동기(Synchronous)

  • 동기는 말 그대로 동시에 일어난다는 의미
  • 요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어져야 한다.
  • 순서에 맞춰 진행되는 장점이 있지만, 여러 가지 요청을 동시에 처리할 수 없다.

비동기(Asynchronous)

  • 비동기는 동시에 일어나지 않는다는 의미
  • 요청과 결과가 동시에 일어나지 않을 거라는 약속
  • 하나의 요청에 따른 응답을 즉시 처리하지 않아도, 그 대기 시간동안 또 다른 요청에 대해 처리 가능한 방식이다.

동기와 비동기의 특징

  • 동기의 특징
    • 설계가 매우 간단하고 직관적이다
    • 결과가 주어질 때까지 아무것도 못하고 대기해야한다.
  • 비동기방식
    • 동기보다 복잡하다.
    • 결과가 주어지는데 시간이 걸리더라도 그 시간 동안 작업을 할 수 있으므로 자원을 효율적으로 사용가능

블록과 논블록

  • 블록
    • 작업이 완료될 때까지 제어권을 반환하지 않는 방식 
    • 파일 I/O, 소켓 I/O 등등 사용
    • 함수 a가 함수 b를 호출한다고 가정 했을 때 함수 a는 제어권을 함수 b에게 양도하기 때문에 b가 완료 되어 제어권이 돌아오기 전까지 a의 실행이 멈춘다.
  • 논블록
    • 작업이 완료되지 않아도 제어권을 즉시 반환하는 방식
    • 네트워크 서버, 이벤트 드리븐 시스템, 논블로킹 I/O, 멀티스레드 환경에서위 동시성 제어 등등 사용
    • 함수 a가 함수 b를 호출해도 제어권을a가 가지고 있기  때문에 함수 b가 실행되는 와중에도 함수 a가 실행된다.

동기,비동기,블로킹,논블로킹의 조합

  • 동기 + 블록
    • 동기 + 블로킹 조합은 다른 작업이 진행되는 동안 자신의 작업을 처리하지 않고, 다른 작업의 완료 여부를 받아 순차적으로 처리하는 방식.
    • a의 작업 결과가 b작업에 영향을 주는 경우 활용할 수 있다.
  • 동기 + 논블록
    • 동기 + 논블록 조합은 다른 작업이 진행되는 동안에도 자신의 작업을 처리하고, 다른 작업의 결과를 바로 처리하지 않아 작업 순서가 지켜지지 않아도되는 방식. 
    • a의 작업을 진행하면서 b의 작업을 진행한다. b의 작업이 끝나는 것을 주기적으로 확인한다.
    • 예를 들자면 로딩창 등이 동기 + 논블록이라고 할 수 있다.
  • 비동기 + 블록
    • 비동기 + 블로킹 조합은 다른 작업이 진행되는 동안 자신의 작업을 멈추고 기다리는 (Blocking), 다른 작업의 결과를 바로 처리하지 않아 순서대로 작업을 수행하지 않는 (Async) 방식이다
    • 해당 경우의 경우 실무에서 마주치기 쉽지 않다.
  • 비동기 + 논블록
    • 다른 작업이 진행되는 동안 자신의 작업을 처리하고, 다른 작업의 결과를 바로 처리하지 않아 작업순서가 지켜지지 않는 방식
    • 함수 a가 함수 b,c,d를 호출 할 경우  a는 자신의 일을 처리하고 b,c,d가 각각 작업을 종료할 경우  콜백 함수를 통해 작업의 결과를 따로 후처리할 수 있게 된다.

 

'CS' 카테고리의 다른 글

교착상태와 기아상태  (0) 2025.03.17
스레드 세이프(Thread Safe)  (0) 2025.03.13
컨텍스트 스위칭(context Switching)  (0) 2025.03.12
프로세스와 스레드의 차이  (0) 2025.03.12
CORS(교차 출처 리소스 공유)  (0) 2025.03.11