동기, 비동기 / 블로킹, 논블로킹

·2024년 11월 3일
0

CS

목록 보기
25/26

동기와 비동기, 블로킹과 논블로킹은 비슷하게 보일 수 있지만, 시스템의 작업 방식과 흐름 제어에 따라 각각 다른 개념이다.

동기(Synchronous) / 비동기(Asynchronous)

  • 동기/비동기의 관점: 작업 요청 후 작업이 완료될 때까지 기다릴지(동기) 아니면 다른 작업을 진행할 수 있을지(비동기)를 결정한다.
  • 핵심 차이: 요청한 작업의 완료 여부를 신경 써서 작업을 순차적으로 수행할 지 아닌지를 정하는 방식이다.

image

동기

  • 정의: 작업을 요청하면 해당 작업이 완료될 때까지 기다리는 방식. A 작업이 끝나야 B 작업이 시작되므로 특정 작업이 완료될 때까지 다음 작업으로 넘어가지 않음.
  • 예시: ATM에서 돈을 출금할 때, 앞사람이 출금을 마칠 때까지 기다려야 내 차례가 오는 것과 비슷하다.

비동기

  • 정의: 요청을 보내고 해당 작업의 완료 여부와 관계없이 바로 다음 작업을 진행. 작업이 끝나면 결과를 알려주는 콜백이나 이벤트를 사용해 처리됨.
  • 예시: 음식 배달을 주문하면, 음식이 도착할 때까지 기다리지 않고 다른 일을 할 수 있다. 음식이 도착하면 알림이 오기 때문이다.

비동기의 성능 이점

비동기 방식은 작업 완료 여부를 신경 쓰지 않고 바로 다음 작업을 수행하므로, I/O 작업과 같은 느린 작업이 발생할 때 다른 작업을 동시에 처리할 수 있다. 이로 인해 멀티태스킹이 가능해지고 전반적인 시스템 성능이 향상된다.


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

  • 블로킹/논블로킹의 관점: 함수 호출 시 작업을 완료할 때까지 기다릴지(블로킹) 아니면 바로 반환할지(논블로킹)를 결정한다.
  • 핵심 차이: 호출된 함수가 현재 작업을 차단(block)하는지 여부에 따라 다른 작업을 수행할 수 있는지에 대한 방식이다.

블로킹

  • 정의: 호출된 함수가 작업을 완료할 때까지 호출한 코드의 실행을 멈추는 방식. 다른 작업을 처리할 수 없고, 해당 작업이 완료되기를 기다려야 한다.
  • 예시: 주유소에서 기름을 넣는 동안 차가 멈추고 주유가 끝날 때까지 기다리는 상황과 같다.

논블로킹

  • 정의: 호출된 함수가 작업이 완료되기를 기다리지 않고 바로 반환되는 방식. 작업이 완료되지 않아도 코드의 실행을 멈추지 않으므로, 다른 작업을 동시에 처리할 수 있다.
  • 예시: 드라이브스루에서 주문하고 음식을 기다리는 동안 차를 잠시 세워놓고 다른 일을 할 수 있는 상황과 비슷하다.

비동기와 논블로킹의 차이

  • 비동기: 작업이 완료되었을 때 알림을 주는 방식. 요청 후 작업이 끝날 때까지 기다리지 않고, 완료 시점에 결과를 알려주는 콜백이나 이벤트를 통해 처리된다.
  • 논블로킹: 작업 요청 후 결과를 기다리지 않고 즉시 반환되는 함수. 논블로킹 함수는 호출 즉시 다음 작업으로 넘어가며, 함수가 반환될 때 작업이 완료되었는지는 상관하지 않는다.

참고: 논블로킹 함수가 비동기인 경우가 많지만, 모든 논블로킹 함수가 비동기인 것은 아니다.


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

동기 + 블로킹

작업을 요청하고 결과를 받을 때까지 아무 작업도 못 하고 기다림.

image

동기 + 논블로킹

작업을 요청하면, 결과를 기다리지만, 중간에 다른 작업도 할 수 있음. (이 조합은 흔하지 않다)

image

비동기 + 블로킹

비동기 작업이 끝날 때까지 기다리지만, 중간에 다른 작업은 하지 않음. (사용 빈도 적음)

image

비동기 + 논블로킹

작업을 요청하고 기다리지 않으면서 다른 작업을 수행. (예: JavaScript의 비동기 콜백, 프로미스

image

전체 비교

image

참고

https://inpa.tistory.com/entry/👩‍💻-동기비동기-블로킹논블로킹-개념-정리

이미지 출처

https://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/

https://tang25.tistory.com/entry/컴퓨터-과학-CS동기와-비동기-블로킹-논블로킹

https://learnjs.vlpt.us/async/

0개의 댓글