티스토리 뷰
Synchronous vs Asynchronous, Blocking vs Non-Blocking
wavid 2020. 12. 24. 00:53요즘 Reactor 기반의 RxJava, Spring Webflux 등의 기술들이 내세우는 점이 Asynchronous & Non-Blocking 기반 방식이라는 점이다. 그래서 Webflux를 학습하기 전에 Sync, Async, Blocking, Non-Blocking에 대한 개념을 한번 정리하고자 한다.
Synchronous (동기) vs Asynchronous (비동기)
먼저 Synchronous의 어원을 보면 syn -> together, chronous -> time을 의미한다. 그래서 두 가지 이상이 함께 시간을 맞춘다 (동기) 라는 의미이다. Asynchronous는 Synchronous에 부정 접두사인 a가 붙은 것으로 두 가지 이상이 서로 시간을 맞추지 않는다 (비동기) 라는 의미이다.
그래서 동기/비동기를 언급할 때는 '무엇과 무엇이?' 그리고 '어떤 시간을?' 맞춘다는 것인지 확실히 해야함.
그래서 동기의 의미를 좀 더 풀어보면 아래와 같다.
A와 B가 함께 간다고 할 때, 두 가지가 동시에 시작하거나 동시에 종료하거나 하면 동기라고 할 수 있다.
예로 들면 A, B 쓰레드가 동시에 작업을 시작하면 동기라고 할 수 있다. 또한 메소드 호출 레벨에서 보면 메소드 리턴시간(A)과 결과를 전달받는 시간(B)이 일치하면 동기라고 할 수 있다.
뿐만 아니라 위와 같은 A가 끝나는 시간과 B가 시작하는 시간이 같은 케이스 (Java의 synchronized, BlockingQueue)도 동기라고 볼 수 있다.
Blocking vs Non-Blocking
블로킹, 논블로킹은 동기, 비동기와는 관점이 전혀 다르다.
블로킹, 논블로킹은 내가 직접 제어할 수 없는 제 3의 대상을 내가 어떤 식으로 상대할 것이냐의 측면에서 보는 것이다. 그렇기 때문에 블로킹, 논블로킹으로 구분해서 설명할 수 있는 대상이 제한적이다.
구체적으로 예시를 들면 내가 어떤 메소드를 호출해서 뭔가를 받아와야 할 때, 그 받아와야하는 대상의 데이터가 내가 통제하지 못하는 외부의 제 3의 존재로부터 Input을 받는다, I/O가 일어난다 하는 경우, 혹은 나 말고 다른 쓰레드가 존재해서 뭔가 작업을 하다가 어느 순간에 그 쓰레드부터 결과를 확인 받거나 그 쓰레드가 종료하는 걸 확인하고 넘어가야 하는 상황을 블로킹, 논블로킹으로 구분해서 설명할 수 있다.
function Caller() {
functionA();
functionB();
functionC();
}
function functionA() {
...
return something;
}
위의 코드에서 Caller가 functionA()를 호출하고 functionA()가 응답을 줄 때까지 기다리겠다 하면 블로킹인 것이고, Caller가 functionA()가 응답을 주지 않았더라도 이후 로직을 계속 수행하겠다 이게 논블로킹이라고 보면 될 것이다.
[참고 및 출처]
- Total
- Today
- Yesterday
- 필터
- Synchronous
- 비동기
- Filter
- 프로그래머스
- non-blocking
- 논블로킹
- Asynchronous
- 프로그래머스 Level 2
- 프로그래머스 Level 1
- 프로그래머스 Level 3
- 블로킹
- Handler Interceptor
- 스택/큐
- 동기
- http://www.nextree.co.kr/p6960/
- 핸들러 인터셉터
- 인터셉터
- a
- 해시
- blocking
- 코딩테스트 고득점 Kit
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |