자꾸 헷갈리게 되는 동기와 비동기에 대해서 정리해보려고 합니다.
Blocking vs Non-Blocking
동기, 비동기 처리 방식을 언급할때 같이 언급되는 용어인 blocking과 non-blocking에 대해 알아보겠습니다.
저는 이 두 가지를 일종의 상태를 설명하는 용어라고 이해하고 있습니다.
Blocking의 경우에는 우리가 무엇인가를 호출하고 System call이 완료된 후 리턴하기 까지 계속 wait queue에 들어가 있는 상태를 일컫습니다.
한 마디로 정의하자면 작업 중단된 상태입니다.
Non-Blocking은 System call과 관계없이 리턴하기에 queue에 들어갈 필요도 없습니다.
동기식 방식
동기식 방식은 순차적으로 작업을 진행합니다.
순차적이라서 앞의 작업이 끝나지 않으면 다음 작업은 실행되지 못합니다.
대기상태에 들어가는 거죠.
서버와 통신을 하면서 작업을 한다고 생각해봅시다.
외부 서버로부터 데이터가 온 다음에 실행되는 작업이 있다면??
서버로부터 데이터가 와야 하는 그 시간 동안 작업이 멈추게 되고 Blocking 상태라고 보시면 됩니다.
따라서 효율이 떨어진다고 볼 수 있습니다.
비동기식 방식
비동기식은 병렬적으로 수행하는 방식입니다.
아까 예시에서 서버로부터 데이터가 오지 않았어도 다음 작업을 수행합니다.
이후 데이터가 오게 되면 이후에 끊긴 작업을 이어가는 방식입니다.
비동기식은 처리결과를 알려주는 콜백 함수를 통해서 위와 같은 장점을 가집니다.
그리고 대기하지 않기 때문에 Non-blocking으로 볼 수 있습니다.
동기 vs 비동기
설계 부분에서는 동기방식이 우수합니다.
직관적이고 간단하게 구현 가능하죠.
허나 요청에 따른 결과를 받기 전까지는 다른 작업들이 중단된다는 단점이 있습니다.
비동기 방식의 경우 설계가 동기 방식보다는 복잡합니다.
그러나 동기식 방식의 단점을 커버할 수 있죠.
참고
'web' 카테고리의 다른 글
전송계층의 TCP와 UDP (0) | 2021.03.13 |
---|---|
인터넷 통신 (0) | 2021.03.12 |
Cookie & Session (0) | 2020.07.29 |
[Web] POST 요청 시 한글 깨짐 현상 (0) | 2020.07.19 |
[Web] POST 요청 (0) | 2020.07.19 |