일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- pinecone
- 추천시스템
- update_state
- lcel
- langgrpah
- langgraph
- 강화학습의 수학적 기초와 알고리듬 이해
- LangChain
- rag
- toolnode
- add_subgraph
- subgraph
- REACT
- human-in-the-loop
- rl
- 밑바닥부터 시작하는 딥러닝
- removemessage
- summarize_chat_history
- humannode
- RecSys
- Ai
- 밑바닥부터시작하는딥러닝 #딥러닝 #머신러닝 #신경망
- 강화학습의 수학적 기초와 알고리듬의 이해
- conditional_edge
- Python
- 강화학습
- tool_binding
- conditional_edges
- tool_calls
- chat_history
- Today
- Total
타임트리
[Python] 동시성(concurrency)와 병렬성(parallelism) 본문
동시성은 Concurrency, 병렬성은 Parallelism을 번역한 용어로 둘은 다른 개념이다. 이 둘의 차이에 대해서 알아보자.
먼저 동시성과 병렬성의 정의는 다음과 같다.
- 동시성(concurrency): 한 번에 여러 작업을 동시에 다루는 것 (switch의 개념)
- 병렬성(parallelism): 한 번에 여러 작업을 병렬적으로 처리하는 것 (at the same time의 개념)
좀 더 쉽게 말하면, 동시성은 시간과 관계없이 여러 작업이 처리되고 있는 상태를 만족하는 것을 의미하고, 병렬성은 시간상 동시에 처리되고 있는 것을 의미한다.
아직 조금 헷갈리는 것 같다. 주문을 받아 요리사가 요리를 하는 예시를 통해 이해해보자. 현재 상황은 요리사에게 ["파스타", "피자", "스테이크"] 주문이 들어온 상태다. 이때 한 요리사가 동시성으로 작업하는 경우와 3명의 요리사가 병렬성으로 작업하는 경우를 생각해보자.
동시성으로 작업하는 경우, 파스타 면을 끓이기 위해 물을 올리고 끓을 때까지 가만히 기다리지 않고 작업을 스위칭해서 피자 도우를 만들고 또 작업을 스위칭해서 스테이크를 굽기 위한 불을 올리는 등 스위칭해가면서 동시에 여러 요리를 수행하게 된다.
반면, 병렬성으로 작업한다면 3명의 요리사가 각각의 작업을 맡아 동시에 여러 작업을 평행적으로 수행하게 된다. 이때 만약 각 요리 작업(파스타 작업, 피자 작업, 스테이크 작업)을 CPU 코어로 대입한다면 각 코어가 멀티적으로 프로세스를 진행하는 것으로 멀티 프로세싱이 된다. 그런데 이 작업은 코어가 아닌 스레드 단위에서 동작할 수도 있다. 예를 들어, 3명의 요리사를 고용한 고용주 입장에서는 고용주는 프로세스, 각 요리사가 스레드가 될 수 있다. 이런 경우 멀티 스레딩이 된다. 즉, 멀티 스레딩과 멀티 프로세싱은 병렬성 프로그래밍으로 가능하다.
동시성과 병렬성에 대해 개념 정리를 다시 해보자.
동시성
- 동시성은 논리적인 개념으로 멀티 스레딩에서 사용되기도 하고, 싱글 스레드에서 사용되기도 한다.
- 이전 짜장면 배달 예제 코드에서 살펴본
asyncio
프로그램이 싱글 스레드에서 사용된 동시성 예제! - 그럼 만약 이 프로그램을 각각의 스레드가 독립적으로 수행한다면? → 멀티 스레딩에서의 동시성
- 이전 짜장면 배달 예제 코드에서 살펴본
- 싱글 코어 뿐만 아니라 멀티 코어에서도 각각의 코어가 동시성을 사용할 수 있다!
병렬성
- 병렬성은 물리적인 개념으로 멀티 스레드 혹은 멀티 코어에서만 병렬성 프로그램이 가능!
- 만약 요리사가 한 명만 있다면 동시에(같은 시간에) 3가지 요리를 만들지 못함\
- 병렬성에서 동시성을 가질 수 있다.
- 동시성은 논리적 개념이기 때문
- 만약 3명의 요리사에게 30개의 요리 주문이 들어오면, 3명의 요리사가 동시에 요리를 함과 동시에 10개의 요리를 동시성으로 작업할 수 있다!
동시성과 병렬성을 정리하자면 다음과 같다.
- 동시성의 핵심은 스위칭(switching)으로, 동시에 여러 작업을 수행하는 것이 아니라 스위칭 하며 여러 작업을 처리하는 것
- 병렬성의 핵심은 동시간(at the same time)으로, 동시에 여러 작업을 수행하는 것을 의미한다.
- 동시성은 논리적인 개념이고 병렬성은 물리적인 개념으로 둘은 공존할 수 있다. 다시 말해, 병렬성으로 작업하며 동시성을 가져갈 수 있다!
참고로, 추후 살펴보겠지만 파이썬에서는 gil global interpreter lock이라는 개념으로 인해 스레드를 병렬적으로 구현할 수 없다. 즉, 멀티 스레드가 병렬적으로 작업을 수행할 수 없다. 그래서 Python에서는 멀티 스레드가 동시성으로 수행 되어야만 한다.
---
참고: 인프런(파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI))
'Today I Learned > 동시성 프로그래밍' 카테고리의 다른 글
[Python] Multi-Threading, Multi-Processing, GIL (0) | 2024.05.26 |
---|---|
[Python] 프로그램, 프로세스와 스레드 (0) | 2024.05.26 |
[Python] 파이썬 코루틴 (0) | 2024.05.26 |
[Python] 동기와 비동기 (0) | 2024.05.26 |
[Python] 바운드와 블로킹 (0) | 2024.05.26 |