스레드와 프로세스는 운영 체제의 용어입니다. 간단히 말해서 각 애플리케이션에는 고유한 프로세스가 있습니다.
운영 체제는 메모리 공간 등과 같은 일부 실행 리소스를 이러한 프로세스에 할당합니다. 이 프로세스에서 일부 스레드가 생성될 수 있으며 이러한 스레드는 이러한 메모리 공간을 공유하고 병렬 컴퓨팅을 위해 운영 체제에서 호출됩니다.
우리 모두는 Mac OS X, UNIX, Linux, Windows 등과 같은 최신 운영 체제가 동시에 여러 작업을 실행할 수 있다는 것을 알고 있습니다. 예를 들어, 브라우저를 사용하여 인터넷을 서핑하고, 코드를 입력하고, Markdown으로 블로그를 작성하는 것은 동시에 최소 3가지 작업이 실행되는 것입니다. 물론 동시에 백그라운드에서 조용히 실행되는 작업이 많이 있지만 데스크탑에는 표시되지 않습니다. 운영 체제의 경우 작업은 프로세스입니다. 예를 들어 브라우저를 여는 것은 브라우저 프로세스를 시작하는 것을 의미하고, PyCharm을 여는 것은 PtCharm 프로세스를 시작하는 것을 의미하며, Markdown을 여는 것은 Md 프로세스를 시작하는 것을 의미합니다.
지금은 멀티코어 CPU가 매우 인기가 있지만. 하지만 CPU 실행 코드는 순차적으로 실행되기 때문에 이때 단일 코어 CPU는 어떻게 여러 작업을 수행하는지에 대한 질문이 생길 것입니다.
실제로 운영 체제는 각 작업을 교대로 실행합니다. 태스크 1은 0.01초 동안 실행되고, 태스크 2로 전환되고, 태스크 2는 0.01초 동안 실행되고, 태스크 3으로 전환되고, 0.01초 동안 실행되고... 곧. 표면적으로는 각 작업이 번갈아 가며 실행되지만, CPU의 실행 속도가 너무 빨라서 육안으로는 인식할 수 없고, 마치 모든 작업이 동시에 실행되는 것처럼 느낄 수 없습니다.
멀티태스킹의 진정한 병렬 실행은 멀티 코어 CPU에서만 가능합니다. 그러나 작업 수가 CPU 코어 수보다 훨씬 많기 때문에 운영 체제는 자동으로 각 코어에 많은 작업을 예약합니다. 실행을 위해 차례입니다.
비디오 재생, 오디오 재생, 기사 읽기, 기사 편집 등 일부 프로세스는 브라우저 등 한 가지 이상의 작업을 수행합니다. 실제로 이러한 작업은 모두 브라우저 프로세스의 하위 작업입니다. 프로세스 내에서 동시에 여러 작업을 수행하려면 여러 "하위 작업"을 동시에 실행해야 합니다. 프로세스 스레드 내에서는 이러한 "하위 작업"을 호출합니다.
각 프로세스는 적어도 하나의 작업을 수행해야 하므로 프로세스에는 적어도 하나의 스레드가 있습니다. 물론 하나의 프로세스에 여러 개의 스레드가 있을 수도 있고 여러 스레드가 동시에 실행될 수도 있습니다. 멀티스레딩의 실행 방법은 여러 프로세스의 실행 방법과 동일하며 운영 체제도 여러 스레드 간에 빠르게 전환할 수 있습니다. 스레드를 일시적으로 교대로 실행하면 동시에 실행되는 것처럼 보입니다.
그러면 Python에서 동시에 여러 작업을 수행하려면 어떻게 해야 할까요?
두 가지 해결 방법이 있습니다.
첫 번째는 여러 프로세스를 시작하는 것입니다. 각 프로세스에는 하나의 스레드만 있지만 여러 프로세스가 함께 여러 작업을 수행할 수 있습니다.
또 다른 방법은 프로세스를 시작하고 하나의 프로세스에서 여러 스레드를 시작하여 여러 스레드가 여러 작업을 함께 수행할 수 있도록 하는 것입니다.
물론 여러 프로세스를 시작하는 세 번째 방법이 있으며, 각 프로세스는 여러 스레드를 시작하여 동시에 더 많은 작업을 실행할 수 있습니다. 물론 이 모델은 더 복잡하고 실제로는 거의 사용되지 않습니다.
요약하자면 멀티태스킹을 구현하는 세 가지 방법이 있습니다:
다중 프로세스 모드;
다중 프로세스 + 다중 스레드 모드.
동시에 여러 작업을 실행합니다. 일반적으로 작업은 서로 연관되어 있지 않지만 때로는 작업 1을 일시 중지하고 작업 2가 완료될 때까지 기다려야 계속 실행될 수 있습니다. 작업 3과 작업 4는 동시에 실행될 수 없습니다. 따라서 다중 프로세스 및 다중 스레드 프로그램의 복잡성은 이전에 작성한 단일 프로세스, 단일 스레드 프로그램보다 훨씬 높습니다.
디버깅이 복잡하고 어렵기 때문에 꼭 필요한 경우가 아니면 멀티태스킹을 작성하고 싶지 않습니다. 하지만 멀티태스킹 없이는 불가능할 때가 많습니다. 컴퓨터에서 영화를 보는 경우를 생각해 보세요. 한 스레드는 비디오를 재생하고 다른 스레드는 오디오를 재생해야 합니다. 그렇지 않으면 단일 스레드로 구현된 경우 비디오를 먼저 재생한 다음 오디오를 재생해야 합니다. 그러면 비디오는 분명히 불가능합니다.
다음 섹션