동기/비동기, 블로킹/논블로킹은 무엇이고 각각의 차이점은 무엇인가요?

2025. 10. 8. 19:45·CS
📝 면접 답변 보기

 

동기와 비동기는 '작업 결과를 누가 처리하냐'의 문제입니다.

동기는 호출한 쪽에서 결과를 직접 받아서 처리하고, 비동기는 콜백이나 이벤트를 통해 나중에 별도로 처리됩니다.

 

블로킹과 논블로킹은 '제어권을 언제 돌려주냐'의 문제입니다.

블로킹은 작업이 끝날 때까지 제어권을 반환하지 않아 대기하게 되고, 논블로킹은 작업 완료와 관계없이 즉시 제어권을 돌려줘서 다른 작업을 할 수 있습니다.

 

면접 질문 정리용 레포지토리

https://github.com/unifolio0/backend-interview-study.git

 

GitHub - unifolio0/backend-interview-study

Contribute to unifolio0/backend-interview-study development by creating an account on GitHub.

github.com

핵심 개념

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

관점 : 작업 결과를 누가 처리하는가?(호출되는 함수의 작업 완료 여부를 신경쓰는가)

  • 동기 : 호출한 함수가 작업 결과를 직접 받아서 처리합니다. 메소드 A가 메소드 B를 호출했을 때, A의 실행 흐름 안에서 B의 결과를 기다리고 처리하는 방식입니다. 
  • 비동기 : 호출된 함수가 작업을 완료하면 콜백에나 이벤트를 통해 나중에 별도로 처리합니다. 메소드 A가 메소드 B를 호출하면, A는 B의 완료 여부와 관계없이 자신의 작업을 마치고, B의 결과는 나중에 다른 곳(콜백 함수)에서 처리됩니다.

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

관점 : 제어권을 언제 돌려주는가?

  • 블로킹 : 호출된 함수가 작업을 완료할 때까지 제어권을 돌려주지 않습니다. 메소드 A가 메소드 B를 호출했을 때, 메소드 B가 완료될 때까지 A는 다른 작업을 진행할 수 없습니다.
  • 논블로킹 : 호출된 함수가 작업 완료 여부와 관계없이 즉시 제어권을 반환합니다. 메소드 A가 메소드 B를 호출했을 때, 메소드 B가 완료되지 않아도 제어권을 받아 다른 작업을 진행할 수 있습니다.

동기/비동기, 블로킹/논블로킹의 조합

동기 + 블로킹

가장 일반적인 함수 호출 방식입니다. 메소드 A에서 B를 호출했을 때 B의 작업 완료 결과를 A의 실행흐름 안에서 받은 뒤 처리하고(동기), B가 실행되는 동안 A는 실행을 멈춥니다(블로킹).

동기 + 논블로킹

메소드 A에서 B를 호출했을 때 B의 작업 완료 결과를 A의 실행흐름 안에서 받은 뒤 처리하지만(동기), B가 실행되는 동안 A는 실행을 멈추지 않고 다른 작업들을 수행합니다(논블로킹).

동기 + 논블로킹은 게임에서 자주 활용됩니다. 게임 로딩창을 생각해보면 로딩바가 채워지는 동안 프로그램이 멈추는 것이 아닌 기타 다른 작업들(애니메이션, 직업 확인, 정보 제공 등)이 수행됩니다. 그리고 로딩바가 다 채워지면 게임이 시작이 됩니다.

즉, 로딩바가 채워지는 동안(데이터를 다운받는 동안) 다른 작업들을 수행하면서 로딩바가 다 채워지기를 기다립니다. 그 뒤 로딩바가 다 채워지면 그제서야 완료되고 게임이 시작되는 것이 동기 + 논블로킹의 대표적인 예시입니다.

비동기 + 블로킹

메소드 A에서 B를 호출했을 때 B의 작업 완료 결과는 신경쓰지 않고 콜백함수(or 이벤트)로 처리하도록 하고(비동기), B가 실행되는 동안 A는 실행을 멈춥니다(블로킹).

비동기 + 블로킹은 비효율적이라 거의 쓰이지 않습니다. B의 결과를 필요로 하지 않는데 B가 완료될 때까지 기달려야 하는 것은 불필요하기 때문입니다.

비동기 + 논블로킹

메소드 A에서 B를 호출했을 때 B의 작업 완료 결과는 신경쓰지 않고 콜백함수(or 이벤트)로 처리하도록 하고(비동기), B가 실행되는 동안 A는 실행을 멈추지 않고 다른 작업들을 수행합니다(논블로킹).

'CS' 카테고리의 다른 글

@Async는 어떻게 동작하나요?  (0) 2025.10.06
컴퓨터의 병렬 처리 기술  (5) 2025.07.27
[매일메일] 객체 지향 프로그래밍이란 무엇이고, 어떤 특징이 있나요?  (0) 2025.03.31
[매일메일] PRG 패턴에 대해서 설명해 주세요.  (0) 2025.03.24
'CS' 카테고리의 다른 글
  • @Async는 어떻게 동작하나요?
  • 컴퓨터의 병렬 처리 기술
  • [매일메일] 객체 지향 프로그래밍이란 무엇이고, 어떤 특징이 있나요?
  • [매일메일] PRG 패턴에 대해서 설명해 주세요.
ggio
ggio
개발 공부를 하며 배운 내용을 기록합니다.
  • ggio
    기록을 하자
    ggio
  • 전체
    오늘
    어제
    • 분류 전체보기 (41)
      • SW마에스트로 (5)
      • System Architecture (8)
      • Algorithm (15)
      • Side Tech Notes (7)
      • CS (5)
      • 취준 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래밍
    at-least-once
    매일메일
    시스템 설계
    fail over
    프로액터 패턴
    리트코드
    소프트웨어 마에스트로
    토스 NEXT
    시스템 아키텍쳐
    객체지향
    코딩테스트
    리액터 패턴
    소마
    Programming
    멀티 코어
    부트캠프
    SW마에스트로
    코테
    분산락
    leetcode
    fail back
    알고리즘
    메시지 큐
    ha 아키텍처
    3PC
    지리적 분산
    Algorithm
    다중화
    비관락
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
ggio
동기/비동기, 블로킹/논블로킹은 무엇이고 각각의 차이점은 무엇인가요?
상단으로

티스토리툴바