본문 바로가기

Minding's Programming/FastAPI

[FastAPI] 동시성과 병렬성 개념 정리

728x90
반응형

 

FastAPI를 공부하는데 필요한 동시성과 병렬성에 대해 정리해보았다.

해당 글은 인프런의 ' 파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)'을 수강하며 정리한 글이다.

 

 

동시성 (Concurrency)

- 동시성은 한 번에 여러 작업을 동시에 다루는 것을 의미한다.

- 즉, 하나의 주체가 스위칭을 통해 여러 작업을 진행한다는 것이다. (코루틴이 대표적인 예시)

- A작업을 하는 동안 B작업으로 스위칭, A작업이 끝나지 않았다면 C작업으로 스위칭...

- 멀티 스레딩의 개념이지만 싱글 스레드에서 사용되기도 한다.

- 싱글 코어뿐 아니라 멀티 코어에서도 동시성 사용 가능하다.

- 한 주체가 임의적으로 여러 작업을 진행하는 것이기때문에 일종의 논리적 개념이라고 할 수 있다.

 

 

병렬성 (Parallelism)

- 1개의 주체(스레드)가 아닌 각 작업 마다 스레드가 하나씩 붙어 진행하는 작업을 뜻한다.

- CPU의 멀티 프로세싱의 개념이다. (3코어 = 3개의 작업을 병렬적으로 진행가능)

- 멀티 코어 환경에서만 가능하므로 물리적 개념이다.

- Python 환경에서는 GIL(Global Interpreter Lock)으로 인해 병렬성 구현이 불가하다.

- Python에서는 멀티 스레드를 '병렬성'으로 구현할 수 없다. '동시성'으로만 구현 가능

 

*GIL(Global Interpreter Lock): Python의 한 번에 1개의 스레드만 유지하도록 하는 제어 장치로, 여러 스레드가 자원을 공유할 경우 충돌이 일어나 어느 한 스레드로 인해 다른 스레드가 차단되는 것을 방지한다. 멀티 스레딩의 위험성으로부터 보호하는 장치인 것과 동시에 Python에서 병렬 연산을 구현하지 못하는 이유이기도 하다.

728x90