블로킹과 논블로킹, 동기와 비동기란?

박민수·2024년 10월 30일
post-thumbnail

블로킹과 논블로킹

블로킹과 논블로킹은 작업이 끝날 때까지 요청한 쪽이 기다리는지 여부와 관련된 개념이다.

블로킹 (Blocking)

블로킹은 작업이 끝날 때까지 기다리는 방식이다. 작업을 요청한 후, 결과가 나올 때까지 다른 일을 하지 못하고 대기해야 한다.

예시
식당에서 음식을 주문하고 음식이 나올 때까지 자리에 앉아 기다리는 것을 생각해자. 음식이 나오는 동안 아무것도 하지 못하고 그 자리에 머물러 있어야 하므로, 시간이 걸린다.

💡 요약: 블로킹은 작업이 끝날 때까지 기다리며 다른 일을 하지 못하는 상태이다.

논블로킹 (Non-Blocking)

논블로킹은 작업이 끝날 때까지 기다리지 않고 다른 일을 수행할 수 있는 방식이다. 요청한 작업이 완료되지 않았더라도 다른 작업을 먼저 진행할 수 있다.

예시
식당에서 음식을 주문하고 음식이 나오는 동안 다른 일을 하거나 메시지를 확인하는 것을 생각해보자. 이렇게 하면 음식이 나오는 동안에도 다른 일을 할 수 있어 시간을 효율적으로 사용할 수 있다.

💡 요약: 논블로킹은 작업이 끝날 때까지 기다리지 않고 다른 작업을 진행할 수 있는 상태이다.


동기와 비동기

동기와 비동기는 작업이 완료된 후 결과를 처리하는 방식과 관련된 개념이다.

동기 (Synchronous)

동기는 작업을 요청한 후 그 결과가 나올 때까지 기다린 후 다음 작업을 시작하는 방식이다. 즉, 순서대로 작업을 처리해야 하므로 작업 완료 전까지 대기한다.

예시
세탁기를 돌린 후, 빨래가 다 끝날 때까지 기다렸다가 세탁이 끝난 후에야 옷을 널기 시작하는 것을 생각해보자. 빨래가 끝나야 널 수 있으니, 끝날 때까지 기다려야 한다.

💡 요약: 동기는 작업 순서에 따라 하나씩 처리해야 하며, 이전 작업이 끝나야 다음 작업을 시작할 수 있다.

비동기 (Asynchronous)

비동기는 작업이 완료되기를 기다리지 않고 다음 작업을 먼저 수행하는 방식이다. 작업 완료 여부와 관계없이 작업을 자유롭게 진행하고, 결과는 나중에 받는 방식이다.

예시
세탁기를 돌리고 세탁이 끝날 때까지 기다리지 않고 그동안 다른 집안일을 하다가 세탁이 완료되면 알림을 받고 옷을 널기 시작하는 것을 생각해보자. 세탁기가 돌아가는 동안에도 다른 일을 할 수 있어 시간을 효율적으로 사용할 수 있다.

💡 요약: 비동기는 작업 완료 여부와 상관없이 다음 작업을 먼저 진행할 수 있고, 작업이 끝나면 알림을 통해 결과를 확인할 수 있다.


블로킹과 논블로킹 vs 동기와 비동기의 차이점

이 두 개념은 서로 다른 관점에서 작업 수행 방식을 설명한다.

  • 블로킹과 논블로킹: 작업 요청 후 기다리는지 여부에 관한 개념이다.
  • 동기와 비동기: 작업이 끝난 후 결과를 어떻게 처리할 것인지에 관한 개념이다.

이 둘은 자주 조합되어 시스템이나 프로그램의 성능에 영향을 미친다.

블로킹과 논블로킹, 동기와 비동기 조합 예시

블로킹/논블로킹과 동기/비동기는 다음과 같이 조합하여 다양한 작업 방식으로 사용될 수 있다.

1. 동기 블로킹

  • 예시: 식당에서 음식을 주문하고, 음식이 나올 때까지 자리에 앉아 기다리는 것.
  • 설명: 요청한 작업을 기다리며, 순서대로만 작업을 진행한다.

2. 동기 논블로킹

  • 예시: 음식을 주문하고 다른 일을 하다가 음식이 나오는 시점에 맞춰 자리에 앉아 음식을 받는 것.
  • 설명: 작업 순서에 맞춰 작업하되, 기다리며 아무것도 하지 않는 대신 다른 일을 하다가 결과를 처리한다.

3. 비동기 블로킹

  • 예시: 음식을 주문하고 다른 일을 하다가 알림을 받고 자리에 앉아 음식을 받는 것.
  • 설명: 다른 작업을 하다가 작업 완료 알림을 받고 대기하여 그 다음 작업을 시작한다.

4. 비동기 논블로킹

  • 예시: 음식을 주문하고 다른 일을 하다가, 음식이 나오면 알림을 통해 바로 가서 받는 것.
  • 설명: 결과가 나올 때까지 다른 작업을 하고, 완료되면 바로 작업을 처리한다.

정리

  • 블로킹과 논블로킹은 작업 완료까지 기다리는지 여부에 대한 개념이다.
  • 동기와 비동기는 작업 완료 후 결과를 어떻게 처리할지에 대한 개념이다.
  • 이 두 개념은 함께 사용되어 시스템 성능을 최적화하거나 사용자 경험을 개선하는 데 중요한 역할을 한다.
profile
안녕하세요 백엔드 개발자입니다.

0개의 댓글