집중적 인 작업을 실행할 때 엄지 손가락의 규칙은 실제 코어와 동일한 숫자를 실행하는 것입니다 카운트.
예, 더 많은 작업을 실행할 수 있지만 크기에 관계없이 모든 CPU 코어 리소스를 100 % 할당 할 수없는 리소스 나 스레드 풀의 스레드와 상자를 기다립니다. 배경/기타 프로세스로 인한 스레드 그래서 당신이 인스턴스화하는 작업이 많을수록, 가능한 실제 동시 스레드 (코어 당 1 개)를 초과 할 때 더 많은 스레드를 생성할수록 더 많은 자원 관리, 대기열 및 스와핑이 발생합니다.
바이러스 성 패턴을 사용하여 추가 작업을 시작하여 최적으로 CPU 뚜껑을 닫을 수있는 것으로 나타났습니다. 실제 코어 수와 일대일 비율로 시작된 작업은 완료 할 작업 당 약 1 분에 실행되었습니다. CPU 수를 두 배로 설정하면 작업 시간은 평균 1 분에서 완료까지 평균 5 분 정도 소요됩니다. 코어 수가 과거에 시작된 작업이 많을수록 기하학적으로 느려집니다.
예를 들어, 8 개의 물리적 코어가있는 경우 8 개의 작업 (그리고 TPL을 사용하면 활성 프로세스에서 본질적으로 8 개의 동시 스레드)이 가장 빠릅니다. 다른 작업과 다른 백그라운드 프로세스를 만드는 주 스레드 또는 프로세스가 있지만 리소스 추출 기쁨을 위해 상자가 꽤 격리되어 있으면 상당히 작습니다.
다른 대기열 상자에 응용 프로그램을 배포 할 때 대기열이나 목록에서 작업을 씹을 때 코어 수를 기반으로 작업 뚜껑을 프로그래밍하는 것이 좋습니다. 자동으로 조정됩니다.
, 우리는 왜 두 가지로 나누어, 당신이 물어
var CoreCount = System.Environment.ProcessorCount/2;
를 사용하여 프로그래밍 방식을 확인하려면? 거의 모든 최신 프로세서가 논리 코어 또는 하이퍼 스레딩을 사용하기 때문입니다. 논리 카운트를 사용하면 작업 당 전체 속도와 전체 프로세스가 크게 저하된다는 것을 자체 테스트를 통해 확인해야합니다. 물리적 코어가 핵심입니다. 논리적 인 물리적 대 논리적 인 것을 빨리 발견 할 수는 없었지만, 우리의 상자에 대한 빠른 조사는 이것이 사실이라는 것을 발견했습니다. YMMV,하지만 이것은 꽤 빨리 꽤 빨라질 수 있습니다.
스레드는 무엇을하고 있습니까? –
+1 좋은 질문입니다. 그들은 각각 하나의 SOAP 호출을 만들어 soem 데이터를 전송하고 반환 할 때까지 기다립니다. – Mawg
"return"은 asynch이므로 물론 기다리지 않습니다. 다른 스레드는 SOAP 요청 (fcuntion 호출)이 HTTP를 통해 전송되는 즉시 실행할 수 있습니다. – Mawg