Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

MJ's Blog

멀티스레딩, 멀티프로세싱, 비동기방식 비교 본문

IT

멀티스레딩, 멀티프로세싱, 비동기방식 비교

minje_kim 2025. 5. 18. 19:03
특징 멀티프로세싱 (Multi Processing) 멀티스레딩 (Multi Threading) 비동기 (Async)
동시성(Concurrency) 여러 프로세스가 독립적으로 실행 하나의 프로세스 내에서 여러 스레드가 동시에 실행 단일 스레드에서 I/O 대기 시간 동안 다른 작업 수행
병렬성(Parallelism) 실제 병렬 실행 (여러 CPU 코어 활용) 제한된 병렬 실행 (GIL 제약이 있는 Python의 경우) 병렬 실행이 아님 (동시성만 제공)
실행 단위 프로세스 스레드 코루틴(Coroutine)
메모리 공간 독립적인 메모리 공간 공유 메모리 공간 공유 메모리 공간
공유 자원 Lock 필요 거의 필요 없음 (프로세스 간 통신 필요) 필수적 (공유 자원 접근 시 경쟁 상태 방지) 협력적 멀티태스킹으로 인해 대부분 불필요
주 사용처 CPU 집약적 작업, 병렬 계산 I/O 작업과 CPU 작업이 혼합된 경우 I/O 바운드 작업 (네트워크, 파일 I/O 등)
핵심 모듈/키워드 multiprocessing 모듈, ProcessPoolExecutor threading 모듈, ThreadPoolExecutor asyncio 모듈, async/await 키워드

 

동시성, 병렬성?

1.

"동시성"은 실제로는 한 번에 하나의 작업만 처리하고 있을 수 있으나, 작업 간 전환이 빠르게 일어나 동시에 실행되는 것처럼 보이는 것이며, "병렬성"은 실제로 여러 작업이 정확히 같은 시간에 실행되는 것. (즉, 여러 CPU코어를 사용하는 것임)

 

2.

이때 "병렬성"은 "동시성"에 포함되는 더 좁은 개념임.

즉 모든 병렬 시스템은 동시성을 가지나, 모든 동시성 시스템이 병렬성을 가지는 것은 아님.

 

3.

그래서 3가지 개념을 다시 정리해보자면,

 

  • 멀티스레딩:
    • 동시성 ✓: 여러 스레드가 번갈아 실행됨, 즉 동시성 있음
    • 병렬성 △: Python의 GIL 때문에 CPU 작업에서는 제한적이지만, I/O 작업에서는 효과적인 병렬 처리가 가능. 그래서 병렬성은 애매함
      ▶GIL은 한 번에 하나의 스레드만이 Python 코드를 실행할 수 있도록 하는 락(lock)
      ▶실제로 Python에서 CPU 연산(계산)을 수행할 때는 GIL 때문에동시에 여러 스레드가 Python 코드를 실행할 수 없음
      ▶그러나 I/O 작업 수행 시에는 Python이 일시적으로 GIL을 해제하고 I/O 작업에서는 병렬 처리가 가능하다는 것
  • 멀티프로세싱:
    • 동시성 ✓: 여러 프로세스가 독립적으로 실행됨. 즉 동시성 있음
    • 병렬성 ✓: 여러 CPU 코어를 사용하여 실제로 동시에 작업을 처리. 즉 병렬성 있음
  • 비동기 프로그래밍:
    • 동시성 ✓: 코루틴 간 전환을 통해 여러 작업이 동시에 진행되는 것처럼 보임. 즉 동시성 있음
    • 병렬성 ✗: 단일 스레드에서 실행되므로 실제 병렬 처리는 없음. 즉 병렬성 없음

 


공유 자원 Lock?

1.

작업이 독립적인가 아닌가에 따라 Lock의 필요여부가 나뉘게 되는것.

 

2. 

그래서 케이스별로 정리해보면,

  • 멀티프로세싱 : 각 프로세스가 독립적이므로 일반적으로 락이 필요하지 않음.
  • 멀티스레딩 : 공유 자원에 접근할 때 경쟁 상태(race condition)를 방지하기 위해 락이 필수적
  • 비동기 프로그래밍 : 협력적 멀티태스킹 방식으로 작동하므로 명시적인 전환 지점에서만 컨텍스트 전환이 일어나 대부분의 경우 락이 필요하지 않음.

 

'IT' 카테고리의 다른 글

Dockerfile 작성 연습  (0) 2025.05.27
AWS SageMaker  (0) 2022.05.17