본문 바로가기
목차
CE

동기 처리 및 비동기 처리

by ds31x 2026. 4. 10.
728x90
반응형

동기 처리(Synchronous Processing)와 비동기 처리(Asynchronous Processing)

두 방식의 핵심 차이는 작업 완료를 기다리는 방법에 있음.

  • Synchronous (동기): 요청한 작업이 끝날 때까지 제어 흐름(control flow)이 block됨
  • Asynchronous (비동기): 작업을 등록해 두고 제어권을 즉시 반환받으며, 결과는 나중에 회수함

 

간단한 예로는 vscode의 blocking / non-blocking 모드 실행을 들 수 있음:

vscode 를 터미널에서 code로 실행시 non-blocking 모드로 동작하여 vscode가 열리고 터미널은 다음 입력을 받기 위한 prompt가 출력된다. 즉, vscode와 터미널은 비동기적으로 실행되며 vscode의 종료에 상관없이 터미널은 입력을 받을 수 있음.

만약 code --wait 로 실행했다면 blocking 모드로 동작하며 vscode가 종료되어야 터미널은 다음 입력을 받을 수 있는 상태가 된다.


동기 처리 (Synchronous Processing)

import time

def read_data_sync():
    print("데이터 읽기 시작")
    time.sleep(3)
    print("데이터 읽기 완료")
    return "sample data"

data = read_data_sync()
print("받은 데이터:", data)
print("다음 작업 수행")

실행 순서는 다음과 같음:

  1. read_data_sync() 호출 : 3초간 block
  2. 반환 후 print("받은 데이터:", data) 실행
  3. print("다음 작업 수행") 실행

대기 시간(waiting time)이 곧 정지 시간으로 작용함.

동기 방식은 흐름은 단순하지만 자원 활용 측면에서 비효율적일 수 있음.


비동기 처리 (Asynchronous Processing)

import asyncio

async def read_data_async():
    print("데이터 읽기 시작")
    await asyncio.sleep(3)
    print("데이터 읽기 완료")
    return "sample data"

async def main():
    task = asyncio.create_task(read_data_async())

    print("다른 작업 수행 중")
    await asyncio.sleep(1)
    print("아직도 다른 작업 수행 중")

    data = await task
    print("받은 데이터:", data)

asyncio.run(main())

실행 흐름은 다음과 같이 분리(decoupled)됨.

  1. read_data_async()를 task로 등록 → 즉시 제어권 반환
  2. main()은 그 사이 다른 작업을 수행
  3. await task에서 최종 결과를 회수

즉, 작업 시작 시점결과 사용 시점이 분리된다는 것이 핵심임.


비교 요약

항목 Synchronous (동기) Asynchronous (비동기)
제어 흐름 block 즉시 반환
대기 시간 활용 불가 다른 작업 스케줄링 가능
코드 복잡도 낮음 상대적으로 높음
적합한 상황 단순 순차 작업 I/O-bound 작업

비동기 처리가 유리한 상황

CPU가 연산하는 것이 아니라, 응답을 기다리는 시간이 지배적인 작업에서 효과적임.

  • Network request (네트워크 요청)
  • File I/O (파일 입출력)
  • Database query (데이터베이스 조회)
  • 외부 API 호출

일반적으로 I/O-bound 작업에서 유용함:

  • Asynchronous 에서는
  • 대기 시간 동안 event loop가 다른 coroutine(코루틴)을 스케줄링할 수 있음.
  • 이를 통해, 전체 처리량(throughput)이 크게 향상됨.

같이 보면 좋은 자료들

2026.04.13 - [Python/PySide PyQt] - Qt에서 Event와 Event Handling - Event Loop

 

Qt에서 Event와 Event Handling - Event Loop

Qt에서 Event와 Event HandlingEvent란? GUI application에서 event란 사용자 또는 시스템에서 발생하는 모든 종류의 "사건"을 의미함.사용자가 마우스를 클릭함키보드 키를 누름창이 다른 창에 가려졌다가 다

ds31x.tistory.com

2023.06.20 - [utils/git and github] - [Git] git 에서 editor 로 VS Code 사용하기.

 

[Git] git 에서 editor 로 VS Code 사용하기.

넋두리Linux환경에서 가장 적응하기 귀찮은 게 무엇이냐라고 묻는다면...editor라고 말하고 싶다. 특히, 터치(?) 세대들은 gui에 익숙하다 보니 cli도 굉장히 부담스러워한다. vim은 꼭 익히길 권하지

ds31x.tistory.com

2025.06.07 - [Python] - [Py] subprocess 모듈 사용법.

 

[Py] subprocess 모듈 사용법.

이 문서는 subprocess Module 의 HighLevel Methods의 사용법을 다룸:subprocess.run(),subprocess.getoutput(),subprocess.check_output(),subprocess.PopenPython 3.5 이상을 기준으로 작성됨.1. subprocess 모듈이란?subprocess 모듈은 Pytho

ds31x.tistory.com


 

728x90

'CE' 카테고리의 다른 글

TOML 파일: 설정파일 형식  (0) 2026.04.10
CE: Independent vs Agnostic  (0) 2026.03.17
Machine 이란?  (0) 2026.03.03
Modulation 의 여러 정의  (0) 2026.03.02
USENet-User's Network  (0) 2026.03.02