Asynchronous vs Synchronous, Blocking vs Non-blocking

eland·2026년 2월 10일

기존에는 동기와 비동기, 블로킹과 논블로킹의 차이를 생각했을 때 동기 = 블로킹 vs 비동기 = 논블로킹 이라고 생각했었다.

예전에 금융 서비스를 프로그래밍 할 때, 금융 서비스의 특성상 빠르고 동시 다발적인 로직을 처리해야 하며 각기 다른 유저에게 다른 서비스를 제공해야 했기에 처음으로 비동기 서비스를 구현했었다.

여기서 '비동기'라는 개념을 제대로 알아야 하는데, 단순히 병렬 작업이라고 생각하기 보다는
여러 작업을 요청했을 때 이를 순서대로 처리하는가? 처리하지 않는가에 대해 초점을 두어야한다.

[동기와 비동기의 차이]

즉, 한 작업이 완료 되기전에 다른 작업이 실행 될 수 있는지 없는지의 차이로 볼 수 있다.




이와 비슷하게 생각했던 논 블로킹의 경우에는 병렬이라고 설명했던 것과 같이 동시 다발적으로 여러 프로세스들이 실행되는 것을 말한다.

[블로킹과 논 블로킹]

이런 과정 속에서 보통 동기&비동기와 블로킹&논 블로킹은 서로를 섞어서 사용하여 로직을 처리하는 방식으로 알고리즘을 구성하게 된다.




이렇게 나누면 4가지의 경우로 상태를 나타낼 수 있는데 (1. 동기/블로킹, 2.비동기/블로킹, 3.동기/논블로킹, 4.비동기/논블로킹)

1. 동기/블로킹

이 경우는 흔히 파일을 읽어오거나 I/O 입력이 되는 경우를 말한다.
A->B 프로세스의 순서로 작업이 진행된다면,
기존에 A프로세스를 실행하고 그 결과값을 통해 B프로세스가 작동되고 A프로세스가 완료되기 전에 B프로세스가 시작되지 않는 경우를 동기/블로킹으로 나타낼 수 있다.

코드만 보고도 단순한 서비스의 흐름을 읽을 수 있고 간결하다는 장점이 있지만, 아무래도 프로세스의 순서가 고정되어 있기 때문에 실 서비스 부분에서는 많이 사용되지 않는다고 볼 수 있다.

2. 비동기/블로킹

profile
더 이상 핑계를 댈 때가 아니다.

0개의 댓글