[파이썬] 쉽게 설명한 Process vs Thread

의서쿠·2024년 2월 19일
47

Python-Multi-Processing

목록 보기
1/4
post-thumbnail

프로세스(Process)란?

컴퓨터에서 프로그램이 실행되고 있을 때, 그 실행 중인 프로그램을 프로세스라고 합니다. 예를 들어, 인터넷 브라우저를 열면 하나의 프로세스가 실행되고, 워드 프로세서(문서 작성 프로그램)를 열면 또 다른 프로세스가 실행되는 것이죠. 각 프로세스는 자신만의 독립된 공간을 가지며, 다른 프로세스와는 독립적으로 운영됩니다.

예를 들어, 고등학교 각자의 교실에서 공부하고 있는 학생들을 생각해보죠. 이때 하나의 반을 하나의 프로세스라고 비유해볼 수 있을 것 같습니다.

출처: 나무위키 야간자율학습

스레드(Thread)란?

스레드는 프로세스 안에서 일을 처리하는 더 작은 단위입니다. 하나의 프로세스는 여러 개의 스레드를 가질 수 있어요.

위의 예시에 이어서 설명해보자면, 이는 마치 한 방에서 여러 명의 학생이 각자 다른 과제를 하고 있는 상황과 비슷합니다. 같은 반(프로세스)의 학생들(스레드)은 서로의 자원(교과서, 체육복, 아이패드 등)을 공유할 수 있죠. (*다른 반 친구 것을 빌릴 수도 있겠지만, 예시의 편의성을 위해 수업 중이라고 생각해봅시다.)

출처: 나무위키 야간자율학습

프로세스와 스레드의 차이는?

  • 독립성: 프로세스는 완전히 독립적으로 실행되지만, 스레드는 같은 프로세스 내에서 실행되므로 서로 영향을 줄 수 있습니다.
  • 자원 공유: 프로세스 간에는 자원을 공유하지 않지만, 스레드는 메모리 같은 자원을 공유할 수 있습니다.
  • 생성 비용: 프로세스를 새로 만드는 것은 비용이 많이 들지만, 스레드는 상대적으로 적은 비용으로 만들 수 있습니다.

멀티프로세싱(Multiprocessing)과 멀티스레딩(Multithreading)이란?

  • 멀티프로세싱은 여러 프로세스를 동시에 실행하는 것을 말합니다. 각각의 프로세스가 독립적으로 작동하기 때문에, 하나가 문제가 생겨도 다른 프로세스에는 영향을 주지 않아요. 이는 마치 여러 교실에서 여러 명의 학생이 동시에 공부하고 있는 것과 비슷합니다. (aka 야자시간에 불켜진 고3 교실)
  • 멀티스레딩은 하나의 프로세스 내에서 여러 스레드가 동시에 작업을 처리하는 것입니다. 이 방법은 자원을 효율적으로 사용할 수 있지만, 스레드들이 자원을 공유하기 때문에 서로 영향을 줄 수 있어 관리가 필요해요. 이는 한 교실에서 여러 명이 서로 다른 과제를 동시에 하는 것과 비슷합니다. (aka 고3 교실에서 학생들이 각자의 공부를 하는 것)
출처: Tug of War: MultiProcessing Vs MultiThreading (Medium Blog)

언제 어떤 것을 사용하나요?

  • 멀티프로세싱작업이 서로 독립적이고, 하나의 작업이 다른 작업에 영향을 주지 않는 경우에 유용합니다. 예를 들어, 복잡한 수학 문제를 여러 대의 컴퓨터가 동시에 푸는 상황이 이에 해당해요.

  • 멀티스레딩작업들이 자원을 공유해야 하고, 작은 작업들을 빠르게 처리해야 할 때 유용합니다. 예를 들어, 웹 서버가 동시에 여러 사용자의 요청을 처리해야 하는 경우가 이에 해당합니다.

예시로 이해하기

  • 멀티프로세싱 예시: 여러분이 동료들과 함께 대형 프로젝트를 진행한다고 생각해 보세요. 프로젝트를 더 빨리 완성하기 위해, 각자 다른 부분을 맡아서 각자의 집에서 작업을 합니다. 이렇게 하면, 친구 한 명이 문제에 부딪혀도 다른 친구들의 작업에는 영향을 주지 않죠.

  • 멀티스레딩 예시: 한 팀 프로젝트를 여러분이 맡았다고 생각해 보세요. 프로젝트를 빨리 완성하기 위해, 여러분은 문서 작성, 그래픽 디자인, 데이터 분석 등을 동시에 진행합니다. 여기서 여러분은 하나의 컴퓨터(프로세스)를 사용하고, 각 작업은 별도의 프로그램(스레드)으로 실행되는 것과 같습니다. 이때 모든 작업이 같은 자원(컴퓨터)을 공유하기 때문에, 잘 조정해서 작업해야 해요.

멀티프로세싱과 멀티스레딩은 각각의 장단점이 있어, 상황에 따라 적절히 선택해서 사용해야 합니다.

profile
Always be passionate ✨

7개의 댓글

comment-user-thumbnail
2024년 2월 22일

잘 보았습니다 ^^ .
다만,
Python 은 GIL 과 연관된 여러가지 문제로
아직 CPU Multi Core 를 지원하는 완전한 Multi Thread 가 아닙니다.
I/O 작업에서는 Multi Thread 가 의미있는 성능을 보여주지만
CPU 집약적 작업은 문제가 있죠.
그래서 아직까지는 Multi Process 를 이용하는게 더 나은 부분도 있습니다.
하지만, 기쁜 소식이 있죠.
Python 창시자 Guido van Rossum 님 께서
그의 팀과 함께 Python 에 대대적인 개선 프로젝트를 진행 중 이신데요.
이 프로젝트에 GIL 이슈를 제거하는 내용도 들어가 있어서
프로젝트가 완료되면 Python 에서 진정한 Multi Thread 기능을 볼 수 있을 듯 합니다.
Python 은 너무 느리다는 이야기도 사라지지 않을까요? 😍

4개의 답글
comment-user-thumbnail
2024년 5월 25일

I create a website using Html and CSS https://calculadoraalicia.mx/

답글 달기
comment-user-thumbnail
2024년 6월 6일

I create a website using Html and CSS https://calcularrfc.com.mx/

답글 달기