5장. 병렬 시스템 도구
이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com
"원숭이에게 무엇을 해야 하는지 알려주기"
대부분의 컴퓨터 는 아무것도 하지 않는 데 많은 시간을 소비합니다. 시스템 모니터 도구를 시작하고 CPU 사용률을 보면 여러 프로그램을 실행 중일 때도 100%에 도달하는 경우는 거의 없습니다.[12] 디스크 액세스, 네트워크 트래픽, 데이터베이스 쿼리, 사용자가 버튼을 클릭할 때까지 기다리는 등 소프트웨어에 내장된 지연이 너무 많기 때문이죠. 실제로 최신 CPU 용량의 대부분은 유휴 상태에서 소비되는 경우가 많으며, 더 빠른 칩은 성능 요구 피크의 속도를 높이는 데 도움이 되지만 전력의 대부분은 거의 사용되지 않을 수 있습니다.
컴퓨팅 초기에 프로그래머들은 두 개 이상의 프로그램을 동시에 실행하여 사용하지 않는 처리 능력을 활용할 수 있다는 사실을 깨달았습니다. CPU의 주의를 일련의 작업으로 나누면 특정 작업이 외부 이벤트 발생을 기다리는 동안 CPU의 용량이 낭비될 필요가 없습니다. 이 기술은 일반적으로 병렬 처리 (때로는 "멀티프로세싱" 또는 "멀티태스킹"이라고도 함)라고 불리며, 많은 작업이 한 번에 겹쳐서 병렬로 수행되는 것처럼 보이기 때문에 시간적으로도 병렬 처리라고도 합니다. 이는 최신 운영 체제의 핵심이며, 우리 모두가 당연하게 여기게 된 다중 활성 창 컴퓨터 인터페이스의 개념을 탄생시켰습니다. 단일 프로그램 내에서도 처리를 병렬로 실행되는 작업으로 나누면 적어도 벽에 걸린 시계로 측정할 때 전체 시스템의 속도가 빨라질 수 있습니다.
마찬가지로 중요한 것은 최신 소프트웨어 시스템은 백그라운드에서 수행해야 하는 작업의 양에 관계없이 사용자에게 응답해야 한다는 것입니다. 요청을 처리하느라 프로그램이 멈추는 것은 일반적으로 용납할 수 없는 일입니다. 예를 들어 이메일 브라우저 사용자 인터페이스를 생각해보면, 서버에서 이메일을 가져오라는 요청을 받으면 프로그램은 네트워크를 통해 서버에서 텍스트를 다운로드해야 합니다. 이메일이 충분하거나 인터넷 링크가 느리면 이 단계만 완료하는 데 몇 분이 걸릴 수 있습니다. 하지만 다운로드 작업이 진행되는 동안에도 화면 다시 그리기, 마우스 클릭 등에 반응해야 하므로 프로그램 전체가 멈춰서는 안 됩니다.
병렬 처리는 여기서도 유용합니다. 이러한 장기 실행 작업을 프로그램의 나머지 부분과 병렬로 수행하면 일부 부분이 아무리 바빠도 시스템 전체가 응답성을 유지할 수 있습니다. 또한 병렬 처리 모델은 이러한 프로그램 등을 구조화하는 데 자연스럽게 적합하며, 일부 작업은 독립적인 병렬 엔티티로 실행되는 구성 요소로 더 쉽게 개념화 및 코딩할 수 있습니다.
Python에서 작업을 동시에 실행하는 기본적인 방법에는 -프로세스포크와 스폰된 스레드 두 가지가 있습니다. 기능적으로는 둘 다 기본 운영 체제 서비스에 의존하여 Python 코드의 비트를 병렬로 실행합니다. 절차적으로는 인터페이스, 이식성 및 통신 측면에서 매우 ...