동기 처리(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("다음 작업 수행")
실행 순서는 다음과 같음:
read_data_sync()호출 : 3초간 block- 반환 후
print("받은 데이터:", data)실행 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)됨.
read_data_async()를 task로 등록 → 즉시 제어권 반환main()은 그 사이 다른 작업을 수행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
'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 |