스프링부트 웹 플럭스를 공부하기에 앞서 "동기가 블로킹이고 비동기가 논블로킹 비슷한 거 아냐?" 라고 생각해 정리한다. 앞으로 헷갈리는 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
'컴퓨터공학 > 운영체제' 카테고리의 다른 글
[운영체제] 파일 시스템과 디렉토리 구조 (0) | 2023.09.07 |
---|---|
[운영체제] 페이징 교체 알고리즘 (0) | 2023.05.25 |
[운영체제] 페이징과 외부 단편화, 내부 단편화 (2) | 2023.05.02 |
[운영체제] 교착상태와 은행원 알고리즘 (0) | 2023.05.01 |
[운영체제] 세마포어와 뮤텍스 (0) | 2023.04.22 |