생성 작업자 스레드는 사용 가능한 거의 모든 CPU를 사용합니다.

생성 작업자 스레드는 사용 가능한 거의 모든 CPU를 사용합니다.

CLI 애플리케이션이 있고 일부 작업(예: 미디어 파일 처리 등)을 수행하고 싶다고 가정해 보겠습니다. 애플리케이션 인스턴스를 실행할 때 CPU의 20%를 소비합니다. 나머지 80%는 유휴 상태입니다.

나는 거의 모든 CPU를 사용하기 위해 가능한 한 많은 애플리케이션 인스턴스를 실행할 수 있는 일종의 프로세스 관리자를 원합니다. 애플리케이션은 무엇을 해야 할지, 형제를 방해하지 않는 방법을 알고 있지만 자체적으로 생성/관리할 수는 없습니다.

이런 매니저가 있나요? 저는 Supervisor를 사용하여 각 응용 프로그램의 인스턴스 하나를 사용하여 다양한 응용 프로그램의 고정 세트를 실행해 왔지만 CPU 가용성에 따라 동일한 응용 프로그램의 다양한 인스턴스를 실행하는 데 사용할 수 있는지 여부는 알 수 없습니다.

답변1

예를 들어, 최대 치사율을 위해 일부 소프트웨어가 있습니다. HTCondor그러나 이러한 프레임워크는 상황에 따라 필요한 것보다 설정 비용이 더 높고 학습 곡선이 더 긴 경우가 많습니다.

더 간단하지만 덜 유연한 솔루션은 현재 CPU 로드를 확인하고 이에 따라 wait 프로세스를 종료할지 아니면 하나 이상의 작업을 생성할지(그런 다음 wait 프로세스가 종료되도록) 결정하는 작은 스크립트를 작성하는 것입니다. 이 스크립트는 유사한 것에서 HTCondor발전 했을 수 있습니다.

Makefile첫 번째를 사용한 다음 make -j 4 ... 각 "작업"이 CPU의 20% - 25%를 차지한다는 점을 알고 사용하는 것이 더 간단할 수 있습니다 . 이는 작업이 얼마나 많은 CPU를 사용하는지 알고 있고 작업을 모두 나열할 수 있다고 가정합니다 . 따라서 작업 목록에서 생성 Makefile할 수 없으면 그다지 유연하지 않습니다 .Makefile

관련 정보