728x90
동기와 블로킹은 단지 조합하여 사용되는 것 뿐 전혀 다른 개념
- Blocking / Non-Blocking
-
- 블로킹, 논블로킹 : 제어권(함수실행권)을 언제 넘겨주느냐의 차이
- 블로킹 : 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것
- A함수가 B함수를 호출하면 B에게 제어권을 넘긴다.
- 제어권을 넘겨받은 B는 열심히 함수를 실행한다. A는 B에게 제어권을 넘겨주었기 때문에 함수 실행을 잠시 멈춘다.
- B함수는 실행이 끝나면 자신을 호출한 A에게 제어권을 돌려준다.
- 논블로킹 : 다른 주체의 작업에 관련없이 자신의 작업을 하는 것
- A함수가 B함수를 호출하면, B 함수는 실행되지만, 제어권은 A 함수가 그대로 가지고 있는다.
- A함수는 계속 제어권을 가지고 있기 때문에 B함수를 호출한 이후에도 자신의 코드를 계속 실행한다.
-
- Synchronous / Asynchronous
- 동기(Sync, 싱크) 와 비동기(Async, 어싱크) : 요청받은 함수가 작업을 완료했는지를 체크
- 동기(Sync, 싱크) : 요청자가 작업 완료 여부를 계속해서 확인
- 현재 작업의 응답이 끝남과 동시에 다음 작업이 요청된다.
- 함수를 호출하는 곳에서 호출되는 함수가 결과를 반환할 때까지 기다린다.
- 비동기(Async, 어싱크) : 함수 요청 시 콜백 함수를 함께 전달, 이후 요청자는 작업 완료 여부를 확인하지 않고 요청받은 함수가 작업을 마치면 콜백 함수를 실행해 알려줌
- 현재 작업의 응답이 끝나지 않은 상태에서 다음 작업이 요청된다.
- 함수를 호출하는 곳에서 결과를 기다리지 않고, 다른 함수(callback)에서 결과를 처리한다.
- 동기(Sync, 싱크) : 요청자가 작업 완료 여부를 계속해서 확인
- 동기(Sync, 싱크) 와 비동기(Async, 어싱크) : 요청받은 함수가 작업을 완료했는지를 체크
- 동기 - 비동기 and 블로킹, 논블로킹
- —A함수가 B 함수 호출 시—
- Sync-Blocking
- 함수 A는 함수 B의 리턴값을 필요로 함 (동기)
- 제어권을 함수 B에게 넘겨주고, 함수 B가 실행을 완료하여 리턴값과 제어권을 돌려줄때까지 대기 (블로킹)
- Sync-Nonblocking
- A 함수는 B 함수에게 제어권을 주지 않고, 자신의 코드를 계속 실행(논블로킹)
- A 함수는 B 함수의 리턴값이 필요하기 때문에, 중간중간 B 함수에게 함수 실행을 완료했는지 확인 (동기)
- Async-Nonblocking
- A함수는 호출 시 콜백함수를 함께 전달, 제어권은 주지 않고 자신이 계속 가져 자신의 코드 계속 실행(논블로킹)
- B 함수는 자신의 작업이 끝나면 A 함수가 준 콜백 함수를 실행(비동기).
- Async-blocking : sync-blocking과 성능의 차이가 또이또이하기 때문에 사용하는 경우는 거의 없다(몰라도됨)
- A 함수는 리턴값에 신경쓰지 않고, 콜백함수를 보냄(비동기)
- B 함수의 작업에 관심없음에도 불구하고, A 함수는 B 함수에게 제어권을 넘김 (블로킹)
- 따라서, A 함수는 자신과 관련 없는 B 함수의 작업이 끝날 때까지 기다려야 한다.
- 일부러 사용하는 경우는 없으나 의도치 않게 사용되는 조합
- Node.js(비동기) + MySQL(블로킹)의 조합이 대표적인 예시
- Node.js에서 비동기(async)적으로 DB 작업을 수행하더라도 블로킹 방식으로 작동하는 MySQL 드라이버를 거치게 됨
'CS' 카테고리의 다른 글
[OS] Thread-safe란? 의미 및 설계하는 법 (0) | 2023.10.06 |
---|---|
[OS]멀티스레드 프로그래밍이란? 장점 및 사용환경, 주의점 (0) | 2023.10.05 |
[OS] Context Switching (0) | 2023.10.05 |
[OS] 멀티 프로세스와 멀티스레드의 장단점 (0) | 2023.10.05 |
[Network] 웹 통신의 큰 흐름 (0) | 2023.10.05 |