포스트

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

동기/비동기는 “결과 반환 시점”에 대한 개념이고,

블로킹/논블로킹은 “Thread가 그 사이에 대기하는가”에 대한 개념으로 볼 수 있다.

동기(Synchronous) vs. 비동기(Asynchronous)

  • 동기 (Synchronous)

    동기 방식에서는 하나의 작업이 완전히 끝난 후에야 다음 작업을 실행한다. 즉, 이전 작업이 완료될 때까지 기다리기 때문에 호출한 측은 결과가 돌아올 때까지 “멈춘”상태가 된다.

  • 비동기 (Asynchronous)

    비동기 방식에서는 작업을 시작한 후, 그 작업이 완료될 때까지 기다리지 않고 바로 다음 작업을 수행할 수 있다. 작업이 완료되면 별도의 콜백이나 await를 통해 결과를 처리할 수 있다. 이를 통해 응용 프로그램은 작업이 진행되는 동안에도 다른 작업을 수행할 수 있어 효율적인 리소스 활용과 응답성 향상이 가능하다.


블로킹(Blocking) vs. 논블로킹(Non-Blocking)

  • 블로킹 (Blocking)

    블로킹 작업은 작업이 완료될 때까지 현재 스레드를 “멈추게” 한다. 예를 들어, 동기 메서드 내에서 I/O 작업(파일 읽기, 네트워크 요청 등)을 수행할 때 해당 작업이 끝날 때까지 스레드는 다른 작업을 할 수 없다.

  • 논블로킹 (Non-Blocking)

    논블로킹 작업은 작업이 진행되는 동안에도 현재 스레드가 다른 일을 수행할 수 있도록 한다. 비동기 프로그래밍은 보통 논블로킹 방식으로 구현되며, I/O 작업을 호출한 스레드가 다른 일을 할 수 있도록 하여 애플리케이션의 전체적인 응답성을 높인다.

비동기(asynchronous)와 논블로킹(non-blocking)은 밀접한 관계가 있지만 동일한 개념은 아니다. 예를 들어, 비동기 작업이 내부적으로 스레드를 블로킹할 수도 있으나, 일반적으로 .NET의 async/await 패턴은 논블로킹 방식으로 I/O 작업을 수행한다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.