반응형
시작하기에 앞서, 간단히 기준이 되는 용어를 보겠습니다.
- Blocking/Non-Blocking : '제어권'을 두고 구분
- 동기/비동기 : 결과값을 기다리느냐로 구분
1. Blocking VS Non-Blocking : 제어의 관점
요청한 처리되어야하는 작업이 전체 작업 흐름을 막는지 안 막는지?
🚩 Blocking
- 작업에 대한 제어권이 없다.
- 즉, 다른 주체에게 작업을 요청하면 결과가 돌아올 때까지 다른 작업을 하지않고 기다려야 한다.
- A함수가 B함수를 호출하면, 제어권을 B함수에게 넘긴다.
- B함수가 자신의 함수를 실행하고, A함수는 제어권이 없기 때문에 함수 실행을 잠시 멈춘다.
- B함수의 실행이 끝나면 자신의 제어권을 호출한 A에게 돌려준다.
🚩 Non-Blocking
- 작업에 대한 제어권을 그대로 가지고 있다.
- 즉, 다른 주체에게 작업을 요청하고 나의 작업을 할 수 있다.
- A함수가 B함수를 호출하면 B함수는 실행되지만,
- A함수가 제어권을 가지고 있으므로 A함수도 계속 실행할 수 있다.
2. 동기(Synchronous) VS 비동기(Asynchronous) : 결과(처리)와 순서의 관점
처리해야할 작업에 대해 완료 여부를 신경쓰는지 안쓰는지?
🏁 동기 (Sync)
- 함수 A가 함수 B에게 작업을 요청하면, 함수 B는 의 작업 완료 후 리턴을 할 텐데 이 응답을 계속 체크하면서 확인하는 것이 Synchronus이다.
- 함수 A의 코드를 실행하다가 요청한 작업의 결과가 리턴됐는지 체크하다가 작업의 결과가 돌아오면 바로 처리를 한다.
🏁 비동기 (Async)
- 함수 A가 함수 B를 호출할 때 콜백 함수를 전달하여 함수 B의 작업이 완료되면 콜백함수가 실행된다.
- 함수 B를 호출하고나면, 함수 A는 함수 B의 작업 완료 여부는 신경쓰지 않는 것이 Asynchronus이다.
- 요청한 작업의 결과에 큰 비중을 두지않는다.
예시
(1) Sync - Blocking
- A 주체는 B 주체에게 작업을 요청한 동안 A 작업을 하지않고 기다리다가(Blocking), 결과가 돌아오면 바로 결과를 처리한다.(Sync)
- 사용자에게 입력을 요청하는 경우 (java의 Scanner 라이브러리)
- 커맨드 창에서 입력받는 경우
(2) Sync - Non-Blocking
- A 주체가 B 주체에게 작업을 요청한 동안, A 작업을 계속 실행하면서 중간중간 완료되었는지 체크하다가(Non-Blocking), 결과가 도출되면 바로 처리한다.(Sync)
- 게임에서 맵을 이동할 때 해당 맵 데이터를 물어보면서, 유저에게 로드율이 어느정도인지 보여주는 경우
(3) Async - Blocking
- A 주체가 B 주체에게 콜백함수를 보내는데, B함수의 리턴값에 신경쓰지 않는다. (Async)
- 그럼에도 A주체는 작업을 하지못하고 기다리다가(Blocking), B 주체가 자신의 할일이 끝나고 콜백함수를 호출하면서 제어권을 넘겨준다.도출된 결과를 바로 처리하지않아도 된다.(Async)
- ??? 무슨소리야. 비동기인데 Blocking을 써야할 이유가 있어? 없음!!!!
- 보통 Non-blocking/Async를 하려다 실수로 동작하게되는 경우 뿐이다.
(4) Async - Non-Blocking
- A 주체는 B 주체를 호출하지만, 제어권을 주지 않기 때문에 A 주체의 코드를 계속 실행하고 (Non-Blocking), B 주체는 자신의 할일을 하고 나서 A주체로부터 받은 콜백 함수를 실행한다.(Async)
- 프론트엔드 단에서 서버로 api 요청(ex: AJAX)을 하고, 서버의 응답을 기다리지 않고 자신의 작업을 계속 한다.
fetch('url', option) .then((response) => { return response.json(); }) .then((data) => { something(data); });
참고 영상
반응형
'지식 > Web' 카테고리의 다른 글
JWT (JSON Web Token) 이해와 구조 (0) | 2022.02.21 |
---|---|
웹 스토리지(Web Storage)란? (0) | 2021.11.23 |
서버 사이드 랜더링(SSR)과 클라이언트 사이드 랜더링(CSR) (0) | 2021.08.15 |
[HTML] 자동재생되는 유튜브 영상 넣기(음소거) (0) | 2021.07.16 |