Python에서 다중 처리와 스레딩의 차이점
멀티프로세싱과 스레딩은 모든 컴퓨터 과학 애호가가 알아야 할 가장 중요한 두 가지 개념입니다. 이 두 가지는 여러 프로그램이나 일부 코드를 동시에 실행하는 동일한 목표를 가진 필수 기술입니다. 그들의 최종 목표는 동일하지만 서로 매우 다릅니다. 이 기사에서는 둘 다에 대해 배우고 서로 어떻게 다른지 배웁니다.
파이썬 멀티프로세싱
다중 처리는 한 번에 둘 이상의 CPU 또는 프로세서를 사용하여 여러 프로세스를 실행하는 기술입니다. 이 기술은 여러 프로세서의 가용성을 활용하여 일부 계산 작업을 빠르게 전달하는 데 널리 사용됩니다. 컴퓨터에 추가 프로세서가 없으면 멀티프로세싱이 전제 조건이기 때문에 어떤 코드를 작성하든 상관없이 멀티프로세싱이 작동하지 않습니다.
실제 응용 프로그램에서 다중 처리는 작업을 더 빠르게 수행하는 데 널리 사용됩니다. 이 기술은 컴퓨터 시스템의 잠재력을 최대한 활용하고 누군가가 임대 컴퓨터 시스템이나 클라우드 기반 서비스를 사용하는 경우 비용을 절감합니다.
멀티프로세싱은 프로세스를 활용합니다. 프로세스는 실행 중인 격리되고 독립적인 프로그램입니다. 프로세스에는 별도의 메모리 공간, 코드, 데이터, 파일 및 스택이 있습니다. 일반적으로 프로세스는 스레드에 비해 무겁고 더 많은 리소스를 필요로 합니다. 프로세스의 경우 프로세스 간의 메모리 주소와 공간이 다르기 때문에 프로세스 간 통신이 느립니다.
파이썬 스레딩
이름에서 알 수 있듯이 스레딩은 스레드를 사용합니다. 스레드는 메모리 공간, 코드, 데이터 및 파일을 상위 프로세스 또는 이를 생성한 프로세스와 공유하는 프로세스의 세그먼트입니다. 프로세스와 비교할 때 스레드는 가볍고 생성하기 쉬우며 더 적은 리소스를 필요로 합니다. 스레드는 상위 프로세스와 메모리 공간을 공유하기 때문에 프로세스 간 통신이 빠릅니다.
스레딩은 여러 스레드를 동시에 실행하는 기술입니다. 멀티프로세싱과 마찬가지로 스레딩도 컴퓨터 시스템의 잠재력을 최대한 활용하여 작업을 더 빠르게 실행하는 것을 목표로 합니다. 스레드는 하나의 프로세스에 속하기 때문에 작업을 수행하기 위해 여러 프로세스가 생성되는 멀티프로세싱과 달리 모든 작업이 단일 프로세스 내에서 수행됩니다.
멀티스레딩은 빠르고 강력하지만 프로그램이 교착 상태와 경쟁 조건에 빠질 수 있으므로 주의가 필요합니다. 따라서 스레드 및 관련 리소스를 사용하는 구조화된 방법이 있어야 합니다.
Python의 다중 처리 VS 스레딩
다중 처리 | 스레딩 |
---|---|
프로세스를 사용합니다. | 스레드를 사용합니다. |
무겁고 큰 메모리 공간. | 가볍고 메모리 사용량이 적습니다. |
프로세스는 고유한 독립 메모리 공간을 가집니다. | 스레드는 상위 프로세스와 공유 메모리 공간을 갖습니다. |
프로세스 간 통신은 메모리 주소와 공간이 다르기 때문에 약간 어렵습니다. | 프로세스 간 통신은 공유 메모리 공간으로 인해 쉽습니다. |
새 프로세스를 만드는 것은 더 느립니다. | 새 스레드를 만드는 것이 더 빠릅니다. |
Python에서 다중 처리를 사용하여 진정한 병렬 처리를 구현할 수 있습니다. 배후에서 여러 CPU와 프로세서를 활용합니다. | Python에서는 GIL 또는 Global Interpreter Lock으로 인해 스레딩이 작동하지 않습니다. GIL은 기본 Python 인터프리터 cPython 의 일부입니다. |
Python에서 다중 처리는 multiprocessing 모듈을 사용하여 실제로 구현할 수 있습니다. |
Python에서는 threading 모듈을 사용하여 다중 처리를 실제로 구현할 수 있습니다. |
실행하려면 더 많은 시스템 리소스가 필요합니다. | 실행하는 데 필요한 시스템 리소스가 더 적습니다. |