본문 바로가기
컴퓨터공학/운영체제

동기(Synchronous)와 비동기(Asynchronous), 블로킹(Blocking)과 논블로킹(Non-Blocking)

by 독서왕뼝아리 2023. 3. 9.

스프링부트 웹 플럭스를 공부하기에 앞서 "동기가 블로킹이고 비동기가 논블로킹 비슷한 거 아냐?" 라고 생각해 정리한다. 앞으로 헷갈리는 CS, 안 외워지는 개념들 모조리 정리하여 포스팅 할 계획이다.

 

 

동기와 비동기

A스레드가 B스레드를 호출한 후 결과를 A가 처리하느냐 B가 처리하느냐 작업 완료 여부를 무엇이 신경쓰는지가 관건이다.

 

동기

A스레드가 B스레드를 호출한 후 결과를 받아 A스레드에서 결과를 처리한다. 결과를 대기하는 동안 A스레드는 다른 작업을 처리하지 못하고 대기하여 블로킹처럼 보일 수 있다.

 

비동기

A스레드가 B스레드를 호출한 후 결과는 B스레드에서 처리(Callback)한다. A스레드는 작업에 제약이 없다.

 


블로킹과 논블로킹

A스레드가 B스레드를 호출한 후 작업이 종료될 때까지 A스레드에게 제어권을 빼앗는지, 제어권을 빼앗지 않는지의 차이이다.

 

블로킹

A스레드가 B스레드를 호출한 후 결과를 받을 때까지 제어권은 B스레드에 있다. A스레드는 결과를 기다리며 다른 작업을 수행하지 못하게 된다.

 

 

논블로킹

A스레드가 B스레드를 호출한 후 바로 제어권을 A스레드에 넘겨준다. A스레드는 결과를 받지 않아도 다른 작업을 수행할 수 있다. 

 

 


 

예를 들어 

1. 재료 손질하기

2. 음식 조리하기

3. 설거지하기

세 가지 작업이 있고 재료 손질 후 음식을 조리해야 한다고 하자.

 

  • 동기(Sync) & 블로킹(Blocking)
    일반적인 동기 시스템이다.
    • A는 B에게 재료 손질을 부탁한다.
    • B는 A를 주방에서 내쫓는다.
    • A는 재료가 손질될 때까지 아무것도 할 수 없다.
    • A는 손질 완료된 재료를 받아와 음식을 조리한다.
    • A는 조리를 끝낸 후 설거지를 한다.

 

  • 동기(Sync) & 논블로킹(Non-Blocking)
    A스레드가 B스레드를 호출한 뒤, 다른 작업을 수행하는 동시에 B스레드로부터 결과를 받았는지 지속적으로 확인한다.
    • A는 B에게 재료 손질을 부탁한다.
    • A는 손질 여부와 상관없이 설거지를 한다.
    • B는 재료 손질이 완료되면 A에게 손질 완료된 재료를 전달한다.
    • A는 설거지를 끝낸 후 음식 조리를 한다.

 

  • 비동기(Async) & 블로킹(Blocking)
    굉장히 비효율적인 모델이다. 비동기이긴 하지만 제어권이 없어 비동기처럼 활용하지 못한다.
    • A는 B에게 재료 손질을 부탁한다.
    • B는 A를 주방에서 내쫓는다.
    • B가 재료 손질이 완료하면 C에게 음식을 조리를 시킨다.
    • A는 설거지를 한다.

 

  • 비동기(Async) & 논블로킹(Non-Blocking)
    일반적인 비동기 시스템이다. B스레드가 호출한 후 A스레드는 결과를 신경쓰지 않고 다른 작업을 수행한다.
    • A는 B에게 재료 손질을 부탁한다.
    • A는 손질 여부와 상관없이 설거지를 한다.
    • B가 재료 손질이 완료하면 C에게 음식을 조리를 시킨다.

 

 

내가 이해한 개념은 이렇다. 틀린 개념이 있다면 댓글로 마구 돌을 던져주세요. 

 

 

reference

https://jh-7.tistory.com/25

https://wildeveloperetrain.tistory.com/104