용어 정리
- 제어권 - 자신의 코드를 실행할 권리, 제어권을 가진 함수는 자신의 코드를 끝까지 실행 후 호출한 함수에 제어권을 반환
Blocking(블로킹)
Thread에서 A 함수가 B 함수를 호출하면, 제어권을 A가 호출한 B 함수에 넘겨주는 방식이다.
A 함수가 B 함수를 호출하며 제어권을 넘겨주면 B 함수가 동작하고 A 함수는 B 함수가 동작하는 동안 멈춰있게 된다. 작업을 완료한 B함수는 제어권을 자신을 호출한 A 함수에게 반환하고 A 함수는 멈췄던 부분부터 작업을 이어나간다.
Non-Blocking(논블로킹)
블로킹과는 다르게 제어권을 넘겨주지 함수를 호출하여도 제어권을 전달하지 않는다.
A 함수가 B 함수를 호출하면 B 함수는 실행이 되지만 제어권은 A 함수가 그대로 가지고 있어 A 함수는 작업을 계속 할 수 있다.
블로킹 vs 논블로킹
- 제어권의 처리 방식에 따라서 구분할 수 있다.
Synchronous(동기)
두개 이상의 작업들이 서로의 작업 시작/종료 시간을 맞추어 동시에 일어나게 하는 것이다. 이를 위해서 대기하거나 지속적으로 확인하는 방식을 사용하기도 한다.
Asynchronous(비동기)
작업들이 동시에 일어나지 않아도 되며 서로에게 관련이 되어있지 않다. 하나의 작업이 완료될 때까지 대기하지 않아도 된다.
동기 vs 비동기
- 두개 이상의 작업들이 작업 시작/종료 시간에 서로 연관이 되어있는 여부에 따라서 구분할 수 있다.
블로킹, 논블로킹과 동기, 비동기의 차이
두 개념은 바라보는 관점이 다른데 동기/비동기는 작업을 수행하는 주체가 2개 이상인 경우이고 블로킹/논블로킹은 작업의 대상이 2개 이상이어야한다.
관점이 다르기 때문에 각각을 조합하여 동기/블로킹, 동기/논블로킹, 비동기/블로킹, 비동기/논블로킹의 조합이 가능하다.
동기 / 블로킹
- 실행, 흐름이 순차적이므로 프로그램을 제어하기 쉽다.
- A 함수는 호출한 B 함수의 작업이 끝날 때까지 아무것도 하지 않으며 기다린다.
- 주로 쓰이는 방식이다.
동기 / 논블로킹
- A 함수는 호출한 B 함수의 작업이 끝날 때까지 기다리며 다른 작업을 진행 할 수 있다.
- A 함수는 B 함수의 작업 완료 여부에 대해서 지속적으로 확인하여서 효율이 좋지 않다.
비동기 / 논블로킹
- A 함수가 B 함수를 호출한 뒤 B 함수의 작업 완료 여부는 신경 쓰지 않고 자신의 작업을 진행한다.
- 주로 쓰이는 방식이다.
- 성능과 자원 효율면에서는 가장 우수하다.
비동기 / 블로킹
- B 함수를 호출한 A 함수는 B 함수의 작업 완료에 신경을 쓰지 않으나 B 함수가 작업을 완료 할 때 까지 아무것도 하지 않으며 기다린다.
- 비동기 / 논블로킹 방식을 사용하다 블로킹 방식의 함수를 사용하는 경우에 의도치 않게 발생한다.
참고
728x90
'주제 정리' 카테고리의 다른 글
[운영체제] Lock의 종류 (0) | 2021.08.26 |
---|---|
[아키텍처]마이크로 서비스 (0) | 2021.08.19 |
[JAVA] HashSet (0) | 2021.08.13 |
[JAVA] HashTable, HashMap (0) | 2021.08.12 |
Object 객체 탐구 (0) | 2021.08.07 |