Blocking / Non-Blocking
- Blocking: 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것
- Non-Blocking: 다른 주체의 작업에 관련없이 자신의 작업을 하는 것
→ 다른 주체가 작업을 할 때 자신에게 제어권이 있는지 없는지. 제어의 관점. 제어권의 유무
Sync / Async
- Sync: 동기. 끝나는 동시에 시작한다. 함수의 종료 시점과 결과값을 전달하는 시점이 동일하다.
- Async: 비동기. 끝나는 동시에 시작하지 않는다. 함수의 종료 시점과 결과값을 전달하는 시점이 일치하지 않는다.
→ 순서와 결과(처리)의 관점. 결과의 관심 유무
💡 Blocking == Sync, Non-Blocking == Async ??
관점의 차이이다.
제어권이라는 관점에서는 Blocking, Non-Blocking으로 나눌 수 있고, 시간이라는 관점에서는 Sync와 Async로 나눌 수 있다.
Blocking vs Non-Blocking, Sync vs Async
Block | Non-Block | |
Sync | JAVA | |
Async | JavaScript |
Blocking / Sync
- 예시) 자바의 입출력(IO)
- 입력값을 받을 때까지 blocking 처리되며, 제어권이 넘어갔기 때문에 아래 함수가 실행되지 않는다.
Non-Blocking / Sync
- 제어권은 자기 자신에게 있지만, 결과에 관심을 가지기 때문에 계속 물어본다. 만약 결과가 나오면 이후 과정을 동기적으로 처리한다.
- 예시) 화면 전환 시 정보의 로드율(게임의 로드율)
Blocking / Async
- 자신의 작업에 대한 제어권이 없지만 async이기 때문에 결과를 바로 처리하지 않아도 된다. 굳이 비동기인데 blocking을 쓸 필요가 없다.
- 대게 개발자들이 Non-Blocking / Async로 처리하려다 실수한 경우이다. 즉 안티패턴.
Non-Blocking / Async
- 다른 작업이 시작되어도 자신이 하던 작업을 멈추지 않는다. 따라서 양쪽에서 각자 작업을 처리할 수 있게 된다.
또한 Async이므로 결과가 반환되어도 반환된 결과를 바로 처리하지 않아도 된다. 따라서 자신의 작업이 끝나면 그때 처리한다. - 예시) 자바스크립트 API 요청
Reference
[10분 테코톡] 호기의 blocking VS non-blocking, sync VS async
'CS' 카테고리의 다른 글
[DB] NoSQL (1) | 2024.04.06 |
---|---|
[Network] 프록시(Proxy) (0) | 2024.04.06 |
[자료구조] 힙(Heap) (0) | 2024.03.07 |
[SE] OOP란? (1) | 2024.03.04 |
[DB] Replication이란? (1) | 2023.11.15 |