나는 작업을 만들 PPL을 사용하기 시작하고 파견하고 [아마도이 같은 다른 스레드에 :스레드를 만들 때 PPL이 시스템의 부하를 고려하고 있습니까?
Concurrency::task_group tasks;
auto simpleTask = Concurrency::make_task(&simpleFunction);
tasks.run(simpleTask);
나는 모든 두 번째 작업을 생성하는 작은 응용 프로그램으로 실험. 작업은 5 초 동안 과도한 계산을 수행 한 다음 중지합니다.
PPL이 내 컴퓨터에서 만드는 스레드의 수와 컴퓨터의 부하가 스레드 수 또는 스레드에 할당 된 작업에 영향을 주는지 여부를 알고 싶었습니다. 내 12 코어 컴퓨터에서 하나 이상의 응용 프로그램 인스턴스를 실행할 때 다음과 같이 알 수 있습니다.
- 하나의 응용 프로그램을 실행하면 6 개의 스레드가 생성됩니다. 총 CPU 사용량은 50 %입니다.
- 2 개의 응용 프로그램을 실행할 때 두 스레드 모두 6 개의 스레드를 생성합니다. 총 CPU 사용량은 100 %이지만 내 컴퓨터는 반응이 좋지 않습니다.
- 3 개의 응용 프로그램을 실행할 때 모두 6 개의 스레드 (총 18 개의 스레드)를 생성합니다. 총 CPU 사용량은 100 %입니다.
- 4 개의 응용 프로그램을 실행할 때 이미 총 24 개의 스레드가 있습니다.
프로세스 탐색기와 4 개의 응용 프로그램으로 실행중인 응용 프로그램을 조사한 결과 모든 스레드에 가능한 많은 CPU를 사용하려고하는 6 개의 (심지어 12 개) 스레드가 있음을 분명히 볼 수 있습니다.
Concurrency::SchedulerPolicy policy(1, Concurrency::MaxConcurrency,2);
Concurrency::Scheduler::SetDefaultSchedulerPolicy(policy);
을이 사용하면 정적으로 (이 경우 2) 스레드의 수를 제한 :
PPL은이 같은 기본 스케줄러를 구성하여 스레드의 수를 제한 할 수 있습니다. 24 개의 코어를 가진 서버에서 10 명의 동시 사용자가 있으므로 (모든 응용 프로그램을 2 개의 스레드로 제한 할 수 있음), 10 명의 사용자 중 하나가 늦게까지 작업하는 경우에도 여전히 2 개의 스레드 만 사용한다는 것을 알고 있다면 편리 할 수 있습니다. 나머지 기계는 공회전 상태입니다.
내 질문 : PPL을 구성하여 동적으로 만들 스레드 수를 동적으로 결정할 수 있습니까 (또는 활성 상태를 유지하거나 활성 상태로 유지할 수 있습니까?)? 또는 PPL은 이미 기본적으로이 작업을 수행하고 있으며 관측치가 정확하지 않습니다.
EDIT : 내 테스트 응용 프로그램의 인스턴스가 더 많이 시작되었지만 컴퓨터가 응답 성이 뛰어 났지만 (원래 질문에서 잘못되었습니다) 응용 프로그램이 동시 동작 수를 줄이는 것을 볼 수 없습니다.
감사합니다. 내가 원했던 대답이 아니었지만 여전히 도움이되었습니다. – Patrick