반응형

Blocking/Non-blocking, Sync와 Async: 개념과 예시

 

 

자바 프로그래밍에서는 동시성 처리와 작업의 순서에 따라 다양한 작업 처리 방식이 사용됩니다. 이러한 작업 처리 방식을 이해하고 활용하는 것은 프로그램의 효율성과 성능에 큰 영향을 미칩니다. 이번 포스팅에서는 Blocking과 Non-blocking, 그리고 Sync와 Async에 대한 개념과 자바에서 사용되는 라이브러리 예시를 살펴보겠습니다.

Blocking(블로킹)과 Non-blocking(논블로킹)

 

Blocking (블로킹): 

정의
블로킹은 특정 작업을 요청한 함수나 쓰레드가 그 작업이 완료될 때까지 대기해야 하는 상태를 말합니다.
예시
예를 들어, 레스토랑에서 주문을 하면 주문한 음식이 나올 때까지 계속 기다려야 하는 것과 유사합니다. 이러한 상태에서는 주문을 한 사람이 다른 일을 하지 못하고 음식이 나올 때까지 기다려야 합니다.

 

 

Non-blocking (논블로킹): 

정의
논블로킹은 특정 작업을 요청한 후, 그 작업의 완료 여부와 상관 없이 다른 작업을 계속 수행할 수 있는 상태를 의미합니다.
예시
논블로킹 상황에서는 레스토랑 주문을 예로 들면, 주문을 하고 나서 다른 일을 계속 할 수 있습니다. 주문이 처리되는 동안에도 다른 고객이 주문을 할 수 있습니다.

 

Sync(동기)와 Async(비동기)

 

Sync(동기): 
정의
동기는 요청한 작업이 완료될 때까지 다음 작업을 수행하지 않는 방식을 의미합니다. 즉, 한 작업이 끝나야 다음 작업이 시작됩니다.
예시
주문을 처리하는 동안 다른 작업을 처리하지 않고, 그 주문이 끝난 후에 다음 주문을 받는 상황과 유사합니다.

 

 

Async(비동기):

정의
비동기는 하나의 작업이 끝나지 않았더라도 다음 작업을 병렬적으로 처리할 수 있는 방식을 의미합니다.
예시
주문을 비동기 방식으로 처리하면서 다른 요청도 병렬적으로 처리하는 상황과 유사합니다.


 

이렇게 보면, 'Blocking'과 'Sync', 그리고 'Non-blocking'과 'Async'가 서로 비슷한 개념처럼 보이지만, 사실은 각각 다른 측면을 다루고 있습니다. 'Blocking'과 'Non-blocking'은 작업을 어떻게 대기하는지, 'Sync'와 'Async' 는 작업을 어떻게 처리하는지에 초점을 맞춥니다.

 

즉, 'Blocking'과 'Sync'는 대기하는 방식과 작업 처리 방식에서 차이가 나지만, 결국에는 둘 다 '대기'를 의미합니다. 반면, 'Non-blocking'과 'Async'는 각각 대기하지 않고 다른 작업을 병렬로 처리할 수 있는 방식을 나타냅니다.

 

자바 사용 예시

1. Blocking

java.io 패키지: InputStream 및 OutputStream 클래스는 블로킹 방식으로 입출력 작업을 처리합니다.

 

2. Non-blocking

java.nio 패키지: ByteBuffer, Channel, Selector 등을 통해 비동기 입출력 작업을 처리합니다.

 

3. Blocking Sync
java.util.concurrent 패키지: Semaphore, CountDownLatch, CyclicBarrier 등을 사용하여 동기화 기능을 구현할 수 있습니다.

 

4. Non-blocking Async
CompletableFuture: 자바 8부터 제공되는 CompletableFuture를 활용하여 비동기 작업을 처리합니다.

java.util.concurrent 패키지: ExecutorService, ScheduledExecutorService 등을 통해 비동기 작업을 처리하는 방식을 구현할 수 있습니다.

 

실제 예시로 살펴보기

1. 블로킹 동기 (Blocking Sync): 식당에서 주문을 받을 때 주문이 완료될 때까지 주문한 사람은 대기합니다.

2. 논블로킹 동기 (Non-blocking Sync): 식당에서 주문이 처리되는 동안에도 다른 손님이 주문을 할 수 있습니다.

3. 블로킹 비동기 (Blocking Async): 웹 서버에서 클라이언트의 요청을 처리하는 동안 다른 요청을 처리하지 않습니다.

4. 논블로킹 비동기 (Non-blocking Async): 웹 서버에서 클라이언트의 요청이 처리되는 동안에도 다른 요청을 처리할 수 있습니다.

 

자바에서는 위와 같은 라이브러리와 패키지를 활용하여 다양한 작업 처리 방식을 구현할 수 있습니다. 이를 통해 다양한 상황에 맞게 동작하는 프로그램을 개발할 수 있습니다.

 

 

반응형

'이론 정리' 카테고리의 다른 글

SAGA 패턴  (0) 2023.08.22
[OOP] 객체지향 프로그래밍  (0) 2021.02.27
한글 인코딩  (0) 2019.06.04
가상화 ( IO )  (0) 2018.02.11
가상화 ( 서버 )  (0) 2018.02.11

+ Recent posts