강사님: 김용담
프로세스와 쓰레드란?
프로세스
- 프로세스는 실행중인 프로그램의 인스턴스이다.
- 프로세스 간의 메모리는 공유되지 않고 독립된 메모리 공간을 가진다.
- 프로세스에 문제가 생겨도 다른 프로세스에 영향을 주지 않는다.
- 운영체제에 의해 관리 된다.
쓰레드
- 프로세스 내의 작업 단위
- 같은 프로세스의 쓰레드는 메모리 공유가 가능하다.
- 프로세스보다 가벼운 실행 단위
멀티 프로세스
정의
하나의 프로그램이 여러 프로세스를 만들어 작업을 수행방식을 말합니다.
특징
- 각 프로세스는 메모리 독립입니다.
- 각 프로세스는 영향을 받지 않기 때문에 다른 프로세스에 문제가 생겨도 다른 프로세스에 영향을 주지 않습니다.
장단점
- CPU 코어를 더욱 효율적으로 사용가능합니다.
- 독립된 메모리 공간을 가지기 때문에 메모리를 많이 소비합니다.
멀트 쓰레드
정의
하나의 프로세스에서 여러 쓰레드를 만들어 작업을 수행하는 방식을 말합니다.
특징
- 각 쓰레드는 메모리 공유 가능합니다.
- 쓰레드간 Context Switching 가 비교적 빠릅니다.
장단점
- 메모리 관리가 효율적입니다.
- 공유 메모리로 인해 메모리 동시 접근 경합(Race condition)이 발생 할 수 있습니다.
멀티 프로세스 vs 멀티 쓰레드
특징 | 멀티 쓰레드 | 멀티 프로세스 |
---|---|---|
메모리 사용 | 적음 | 높음 |
안정성 | 낮음 | 높음 |
문맥 전환 비용 | 낮음 | 높음 |
통신 속도 | 빠름 | 느림 |
사용 사례 | I/O 바운드 작업 | CPU 바운드 작업 |
멀티 프로세스 코드
import time
from multiprocessing import Pool, cpu_count
# 행렬 곱셈 작업 함수
def matrix_multiplication_task(matrix_pair):
A, B = matrix_pair
result = [[0] * len(B[0]) for _ in range(len(A))]
for i in range(len(A)):
for j in range(len(B[0])):
for k in range(len(B)):
result[i][j] += A[i][k] * B[k][j]
return result
# 단일 프로세스 실행
def single_process(matrix_pairs):
results = []
for pair in matrix_pairs:
results.append(matrix_multiplication_task(pair))
return results
# 다중 프로세스 실행
def multi_process(matrix_pairs):
with Pool(cpu_count()) as pool:
results = pool.map(matrix_multiplication_task, matrix_pairs)
return results
def main():
matrix_size = 100
num_matrices = 50
matrices = [(
[[i + j for j in range(matrix_size)] for i in range(matrix_size)],
[[i * j for j in range(matrix_size)] for i in range(matrix_size)]
) for _ in range(num_matrices)]
# 단일 프로세스 테스트
start_time = time.time()
single_process(matrices)
single_duration = time.time() - start_time
print(f"Single process duration: {single_duration:.2f} seconds")
# 다중 프로세스 테스트
start_time = time.time()
multi_process(matrices)
multi_duration = time.time() - start_time
print(f"Multi-process duration: {multi_duration:.2f} seconds")
if __name__ == "__main__":
main()
결과
Single process duration: 4.00 seconds
Multi-process duration: 1.81 seconds
결론, 연산의 갯수가 많을수록 멀티 프로세스를 활용한 빠른 처리 속도를 경험 할 수 있었습니다.
'프로그래밍 > AI' 카테고리의 다른 글
Git 활용 전략 (1) | 2024.12.16 |
---|---|
Git 학습 (1) | 2024.12.16 |
Python List (0) | 2024.12.11 |
해시 함수 와 해시충돌 (1) | 2024.12.11 |
Computational Thinking (0) | 2024.12.06 |