한줄 요약
sync, async 👉 현재 작업의 응답과 다음 작업의 요청이 동시에 일어나는가
blocking, non-blocking 👉 호출된 함수가 제어권을 바로 주는가
개발을 하다보면 동기, 비동기라는 말에 대해서 많이 듣게 된다.
하지만 들을 떄마다 그게 뭐더라 ... 하고 개념을 혼동하거나 헷갈릴 때가 진짜 너무너무 많은데, 그래서 동기와 비동기 그리고 함께 빼놓을 수 없는 blocking 과 non-blocking 에 대해서 알아보려고 한다.
동기를 Synchronous 의 앞글자를 따서 Sync,
비동기를 Asynchronous 의 앞을 따서 Async 라고 한다.
Synchronous 의 뜻을 검색해봤을 때 네이버에 검색해봤을 때 동시 발생[존재] 하는
으로 나온다.
그렇다면 어떤게 동시에 일어나는지가 중요한데, 컴퓨터 공학에서는 현재 작업의 응답과 다음 작업의 요청을 말한다.
즉, 컴퓨터 공학에서 동기는 현재 작업의 응답과 다음 작업의 요청이 동시에 일어나는 것이다.
동작하는 과정
작업1
이 프로세스를 수행하는 동안 다른 작업은 실행되지 않고 작업1
이 끝날 때까지 기다린다 작업1
이 모든 프로세스를 끝낸 경우 다른 작업을 실행한다그러면 비동기는 무슨 의미일까 ?
Asynchronous 의 뜻을 검색해봤을 때에는 synchronous 와 반대로 동시에 존재[발생]하지 않는
인걸 알 수 있다.
동시에 존재하지 않는 걸 현재 작업의 응답과 다음 작업의 요청이라고 했을 때
컴퓨터 공학에서 비동기는 현재 작업의 응답과 다음 작업의 요청이 동시에 일어나지 않는 것 즉, 동기의 반대 의미를 가지고 있다.
동작하는 과정
작업1
이 프로세스를 수행할 때 작업2
도 동시에 프로세스를 수행할 수 있다 blocking과 non-blocking은 주로 IO의 읽기, 쓰기에서 사용된다.
블로킹, 저지 현상 이라는 의미를 가지고 있다.
이걸 조금 더 길게 풀어보자면 행위자가 취한 행위 자체가 또는 그 행위로 인해 다른 무엇이 막혀버린, 제한된 상태라고 할 수 있는데, 이걸 컴퓨터 공학의 측면에서 보면 다른 함수가 작업을 하지 못하도록 제어권을 계속 가지고 있는 것 이다.
동작하는 과정
blocking 과 반대의 개념을 가지고 있으며,
호출된 함수가 자신의 할일을 모두 마치지 않더라도 바로 제어권을 리턴해주는 것 이다.
위에서 sync, async, blocking, non-blocking 에 대한 개념을 알아봤는데, 보면서 드는 의문이 있다.
엥 ? 그래서 sync, blocking / async, non-blocking 차이가 뭔데 ?
각각은 관점으로 차이가 나누어 진다.
sync, async 👉 현재 작업의 응답과 다음 작업의 요청이 동시에 일어나는가
blocking, non-blocking 👉 호출된 함수가 제어권을 바로 주는가
사실 나도 진짜진짜 엄청엄청 헷갈렸는데 이미지 연상법을 사용하면 좀 잘 기억할 수 있다.
sync는 싱크로나이즈드
blocking 은 농구 blocking
으로 생각하면 좀 쉽게 이해할 수 있다 !
표로 간단하게 나타내보면 아래와 같다 ⬇️
sync & blocking
: 제어권이 넘어갔고, 순서대로 진행되어야 하기 때문에 대기 시간 발생
: Spring 은 기본적으로 해당 방법으로 동작
sync & non-blocking
: 제어권이 넘어가진 않았지만, 순서대로 진행되어야 하기 때문에 계속적으로 완료확인
async & blocking
: 순서대로 진행되지 않아도 되지만 제어권이 넘어갔기 떄문에 대기 시간 발생
async & non-blocking
: 제어권이 넘어가지 않았고, 순서대로 진행되지 않아도 되기 때문에 호출하고 작업을 하고 있다가 완료 시 콜백
와.... 말린님 블로그 정말 잘 보고 있습니다.
제어권 그림 설명이 대박이네요.. 바로 이해갔어요 ㅎㅎ