우노
Sync, Async, Blocking, Non-Blocking의 개념과 차이 본문
선요약
- Sync / Async 는 호출된 함수의 종료를 호출한 함수가 처리하느냐, 호출된 함수가 처리하느냐의 차이입니다.
- Sync
- A 함수가 B 함수를 호출 할 때, B 함수의 결과를 A 함수가 처리하는 것입니다.
- Sync 작업들이 연속적으로 실행될 땐, 작업의 순서가 유지됩니다.
- Async
- A 함수가 B 함수를 호출 할 때, B 함수의 결과를 B 함수가 처리하는 것입니다.
- Async 작업들이 연속적으로 실행될 땐, 작업의 순서가 유지되지 않을 수 있습니다.
- Sync
- Blocking / Non-blocking 은 호출된 함수가 호출한 함수에게 제어권을 바로 주느냐 안주느냐의 차이입니다.
- Blocking
- A 함수가 B 함수를 호출 할 때, B 함수가 자신의 작업이 종료되기 전까지 A 함수에게 제어권을 돌려주지 않는 것입니다.
- A 함수가 B 함수를 호출하면 B에게 제어권이 넘어갑니다.
- 제어권을 넘겨받은 B는 함수를 실행합니다.
- 이때 A는 B에게 제어권을 넘겨주었기 때문에 A 함수 실행을 잠시 멈춥니다. (Block)
- B 함수가 실행이 끝나면 자신을 호출한 A에게 제어권을 돌려줍니다.
- 제어권을 다시 받은 A 함수는 그다음 작업을 실행합니다.
- A 함수가 B 함수를 호출 할 때, B 함수가 자신의 작업이 종료되기 전까지 A 함수에게 제어권을 돌려주지 않는 것입니다.
- Non-Blocking
- A 함수가 B 함수를 호출 할 때, B 함수가 제어권을 바로 A 함수에게 넘겨주면서, A 함수가 다른 일을 할 수 있도록 하는 것입니다.
- A 함수가 B 함수를 호출합니다.
- 호출된 B 함수는 실행되지만, 제어권은 A 함수가 그대로 가지고 있습니다.
- A 함수는 계속 제어권을 가지고 있기 때문에 B 함수를 호출한 이후에도 자신의 코드를 계속 실행합니다.
- A 함수가 B 함수를 호출 할 때, B 함수가 제어권을 바로 A 함수에게 넘겨주면서, A 함수가 다른 일을 할 수 있도록 하는 것입니다.
- Blocking
Sync, Async, Blocking, Non-Blocking 조합 별 예제
- Sync, Blocking
- 작업량이 적거나 작업 시간이 짧은 경우에 사용됩니다.
- Async, Non-Blocking
- 작업량이 많거나 작업 시간이 긴 경우에 사용됩니다.
- Sync, Non-Blocking
- 게임에서 맵을 이동할 때 맵 로딩율을 표시하는 경우 사용됩니다.
- Non-Blocking이기 때문에 다른 작업을 진행할 수 있지만,
- 다운로드 완료 여부를 지속적으로 확인하여 화면에 로드율을 표시합니다.
- 게임에서 맵을 이동할 때 맵 로딩율을 표시하는 경우 사용됩니다.
- Async, Blocking
- 실무에서 마주하기 쉽지 않은 경우이지만, 실제로 적용된 실무 사례가 있긴 합니다.
- Node.js + MySQL의 조합이 대표적인데,
- Node.js에서 비동기 방식으로 데이터베이스에 접근하기 때문에 Async 이지만,
- MySQL 데이터베이스에 접근하기 위한 MySQL 드라이버가 Blocking 방식으로 작동되기 때문입니다.
- JavaScript는 비동기 방식으로 MySQL에 쿼리를 보냅니다. (Async)
- MySQL은 쿼리를 처리하면서 JavaScript에게 제어권을 넘겨주지 않습니다. (Blocking)
- 그러면 JavaScript는 다른 작업을 계속 수행할 수 있지만, MySQL의 결과값을 필요로 하기 때문에 MySQL이 쿼리를 완료할 때까지 기다려야 합니다.
- 결국 Sync Blocking과 작업 수행에 차이가 없게 됩니다.
Sync Blocking vs Sync Non-Blocking
- 성능 차이는 상황에 따라 다르겠지만,
- 일반적으로 Sync Non-Blocking이 Sync Blocking보다 효율적일 수 있습니다.
- Sync Non-Blocking은 호출하는 함수가 제어권을 가지고 있어서 다른 작업을 병렬적으로 수행할 수 있기 때문입니다.
Async Blocking vs Sync Blocking
- 개념적으로 차이가 있을 뿐이지 성능적으로 차이가 없습니다.
- 보통 의도치 않은 경우에 사용됩니다.
- 그래서 이 방식을 안티 패턴(anti-pattern)이라고 치부하기도 합니다.
참고
'Network & Security > Concept' 카테고리의 다른 글
[Network] HTTP, HTTPS 및 SSL/TLS 암호화 프로토콜 (0) | 2024.04.08 |
---|---|
[Network] 로드밸런싱 알고리즘 종류 (0) | 2023.05.21 |
[Network] CIDR 계산 방법 (1) | 2023.03.25 |
[Network] 통신사별 DNS 서버 아이피 주소 (SKT, KT, LG, 구글) (0) | 2023.02.23 |
[Network] OpenID Connect(OIDC), OAuth 2.0 차이 (0) | 2023.02.18 |
Comments