나나나
[CS] 동기와 비동기 / 블로킹과 논블로킹 본문
동기(Synchronous)와 비동기(Asynchronous)
작업을 수행하는 주체가 두 개 이상
처리해야 할 작업들을 어떤 흐름으로 처리할 것인가
호출되는 함수의 작업 완료 여부를 누가 신경 쓰느냐
동기
- 작업을 수행하는 두 개 이상의 주체가 동시에 수행을 시작하거나, 동시에 끝나거나, 한 주체의 수행이 끝나는 동시에 다른 주체가 시작하는 것을 의미한다.
비동기
- 두 주체가 서로의 수행 시작, 종료 시간과 관계 없이 별도의 수행 시작, 종료 시간을 가지고 있는 것을 의미한다.
A가 B를 호출했을 때 B가 작업을 완료하고 리턴하길 기다리거나, B로부터 바로 리턴 받더라도 작업 완료 여부를 A가 계속 확인하면서 신경 쓴다면 동기이고, 어떤 상황에서든 A가 B의 작업 완료를 신경쓰지 않으면 비동기이다.
블로킹(blocking)와 논블로킹(non-blocking)
작업의 대상이 2개 이상
처리되어야 하는 작업이 전체 작업의 흐름을 막느냐 안 막느냐
호출되는 함수의 제어권 리턴 시기
블로킹
- 자신의 작업을 하다가도 다른 주체가 작업을 시작하면 시작부터 끝까지 기다린 후에 자신의 작업을 시작한다.
논블로킹
- 다른 주체의 작업과 관계 없이 자신의 작업을 계속한다.
A가 B를 호출했을 때 B가 자신의 작업을 모두 마칠 때까지 A에게 제어권을 넘겨주지 않고 대기하게 만들면 블로킹이고, B가 바로 리턴하여 A에게 제어권을 넘겨주고 A가 다른 일을 할 수 있는 기회를 주는 것은 논블로킹이다.
1. 동기 + 블로킹
A가 B를 호출했을 때 B는 자신의 작업이 끝나야만 제어권을 반환하고 A는 B가 작업을 수행하는 동안 대기한다.
B의 시작과 동시에 A의 작업은 멈추고, B의 종료와 동시에 A는 작업을 시작한다.
2. 비동기 + 논블로킹
A가 B를 호출했을 때 B는 제어권을 바로 A에게 반환하여 A가 자신의 작업을 멈추지 않고 수행한다. (이 때, 다른 주체가 하는 작업의 결과에 콜백을 설정하기도 한다.)
A와 B의 수행 시작, 종료 시간을 맞출 필요가 없다.
3. 동기 + 논블로킹
A가 B를 호출했을 때, B는 제어권을 바로 A에게 리턴하여 A는 자신의 작업을 멈추지 않고 수행한다.
하지만, 다른 작업들과의 동기(시간을 맞추기 위해) A는 계속해서 B의 작업 완료를 확인한다.
4. 비동기 + 블로킹
A가 B를 호출했을 때 B는 자신의 작업이 끝나야만 제어권을 반환하고 A는 B가 작업을 수행하는 동안 대기한다.
A는 B와 시간을 맞출 필요도 없고 B의 작업 완료 여부에도 관심이 없지만 제어권이 없으므로 작업을 수행하지 못하고 대기한다. (동기 + 블로킹과 거의 비슷하게 수행됨)
https://deveric.tistory.com/99
http://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/
https://siyoon210.tistory.com/147
'CS' 카테고리의 다른 글
[네트워크] 토큰 기반 인증과 JWT (1) | 2021.06.27 |
---|---|
[네트워크]Authentication과 Authorization (0) | 2021.06.10 |
[네트워크]포워드 프록시(forward proxy)와 리버스 프록시(reverse proxy) (0) | 2021.06.01 |
[네트워크]웹서버와 WAS (0) | 2021.05.31 |
[네트워크]CORS (0) | 2021.05.26 |