프로세스 (Process)
- 프로세스는 독립적으로 실행되는 프로그램의 인스턴스입니다. 각 프로세스는 별도의 메모리 공간과 리소스를 가진다.
- 장점:
- GIL의 영향을 받지 않아, 진정한 병렬 처리가 가능합니다.( GIL은 Global Interpreter Lock의 약어로, 여러 개의 스레드가 파이썬 바이트코드를 한번에 하나만 사용할 수 있게 락을 거는 것을 의미한다, 바이트 코드(Byte code)는 고급 언어로 작성된 소스 코드를 가상머신 이 이해할 수 있는 중간 코드로 컴파일한 것을 말한다.)
- 프로세스 간의 격리로 인해 하나의 프로세스에서 발생한 오류가 다른 프로세스에 영향을 주지 않습니다.(상호독립적으로 구성)
- 단점:
- 프로세스 간 통신(IPC, Inter-Process Communication)이 상대적으로 복잡하고 느립니다.
- 메모리 사용량이 더 많습니다.
스레드 (Thread)
- 정의: 스레드는 동일한 프로세스 내에서 실행되는 가벼운 단위입니다. 스레드들은 같은 메모리 공간을 공유합니다.
- 장점:
- 메모리 공유로 인한 효율적인 자원 사용.
- 스레드 간 통신이 빠르고 간단합니다.
- 단점:
- GIL(Global Interpreter Lock)로 인해, 진정한 병렬 처리가 어렵습니다. (특히 CPU 바운드 작업에서)
- 하나의 스레드에서 발생한 오류가 전체 프로세스에 영향을 줄 수 있습니다.
멀티스레딩 예지
import threading
import time
def print_numbers():
for i in range(1, 6):
print(f"Number: {i}")
time.sleep(1)
def print_letters():
for letter in ['A', 'B', 'C', 'D', 'E']:
print(f"Letter: {letter}")
time.sleep(1.5)
thread1 = threading.Thread(target=print_numbers)
thread2 = threading.Thread(target=print_letters)
thread1.start()
thread2.start()
thread1.join()
thread2.join()
print("All threads are done!")
멀티프로세싱 예제
import multiprocessing
import time
def print_numbers():
for i in range(1, 6):
print(f"Number: {i}")
time.sleep(1)
def print_letters():
for letter in ['A', 'B', 'C', 'D', 'E']:
print(f"Letter: {letter}")
time.sleep(1.5)
process1 = multiprocessing.Process(target=print_numbers)
process2 = multiprocessing.Process(target=print_letters)
process1.start()
process2.start()
process1.join()
process2.join()
print("All processes are done!")
주요 차이점 요약
- 메모리 공유: 스레드는 같은 메모리를 공유하지만, 프로세스는 별도의 메모리를 사용합니다.
- GIL의 영향: 스레드는 GIL의 영향을 받으며, CPU 바운드 작업에서 성능이 제한될 수 있습니다. 반면, 프로세스는 GIL의 영향을 받지 않습니다.
- 안정성: 프로세스는 서로 격리되어 있어 하나의 프로세스 오류가 다른 프로세스에 영향을 주지 않습니다.
- 통신 방법: 스레드는 간단하고 빠른 통신이 가능하지만, 프로세스는 복잡하고 느린 통신을 사용합니다.
적절한 방법을 선택하는 것은 작업의 특성에 따라 다르며, I/O 바운드 작업에는 스레드를, CPU 바운드 작업에는 프로세스를 사용하는 것이 일반적입니다.
I/O 바운드: 입출력 작업이 많은 프로세스
CPU 바운드: 입출력 작업보다 연산작업이 많은 프로세스
파이썬 (python) 한국어 음성인식, (보이스 텍스트 변환) 예제 코드 (음성 -> 텍스트 변환, speech recognition, 오프라인 음성인식) (0) |
2024.05.24 |
파이썬 대용량 파일 읽기 (메모리 매핑, 파일 디스크립터, 식별자, mmap, fileno) (0) |
2024.05.23 |
파이썬 스레드 (쓰레드, thread, threading) 병렬처리, 멀티스레드 예제 코드 (0) |
2024.05.22 |
파이썬 tkinter 마우스 이벤트 코드 예제, 이벤트 종류, bind 함수 설명, (0) |
2024.05.20 |
파이썬 음성 인식 -> 테스트 변환 -> ChatGPT -> 텍스트 음성 변환 -> 음성 출력 코드 speech recognition, pyttsx, openai, microphone, tts, stt (0) |
2023.09.02 |