Sync, Async, Blocking, Non-Blocking

this-is-spear·2023년 4월 8일
0
post-thumbnail

Intro

레퍼런스를 보면 비동기와 논블로킹 용어를 비슷하게 사용하거나 동일하게 사용하는 것을 봤던적이 있고, 용어 차이때문에 이해하는 시간이 길어졌습니다. 그래서 동기와 비동기, 블록킹과 논블록킹을 어떤 기준으로 비교를 할지 고민했습니다.

Sync와 Async

동기와 비동기의 차이는 프로세스 수행 순서 보장에 대한 메커니즘을 의미합니다.

Synchronous

동기 : 어떤 행동을 하는 내적 요인을 의미한다.

동시 : 같은 시기

하나의 작업이 요청과 결과가 같은 시기에 순차적으로 진행 되는지 여부를 의미합니다. 작업을 동시에 수행하거나 동시에 끝내거나 끝나는 동시에 시작한다는 의미라고 볼 수 있습니다.

Asynchronous

하나의 작업 흐름이 순차적으로 진행함을 보장하지 않습니다. 시작과 종료가 같은 시기에 일어나지 않으며 끝나는 동시에 시작하지 않습니다.

https://www.baeldung.com/cs/async-vs-multi-threading

Blocking과 Non-Blocking

블로킹과 논브로킹은 프로세스의 멈춘 상태 여부를 의미하게 됩니다. 이런 차이로 인해 Async가 Non-blocknig으로 동작한다는 것을 확인할 수 있었습니다.

Blocking

다른 작업을 수행하기 위해 제어권을 넘기게 되어 잠시 중단되는 상태를 말한다.

Non-blocking

다른 작업을 수행할 때, 제어권을 넘기지 않고 실행만 시키며 작업을 계속해서 진행하는 방식을 의미한다.

Outro

Sync와 Async의 차이는

sync 방식은 순차적으로 실행됨을 보장하, async는 순차적으로 수행된다는 보장을 하지 않습니다.

그림에서는 비동기 작업은 하나의 작업만 진행되기 때문에 순차적으로 실행되는 것처럼 보여 항상 난해했던 적이 많았습니다. 그래서 이런 그림에서 빨간 박스의 흐름이 항상 동일하게 진행되지 않는다는걸 기억할 필요가 있습니다.

Blocking과 Non-Blocking의 차이는

blocking 방식은 작업의 제어권을 넘겨주기 때문에 제어권을 넘겨받을 때까지 멈춥니다. 즉, 프로세스 A는 waiting 상태로 대기합니다. 반대로 non-blocking 방식은 제어권을 넘기지 않기 때문에 멈추지 않는다. 프로세스 A는 waiting 상태가 되지 않습니다.

profile
익숙함을 경계하자

0개의 댓글