다음을 통해 공유


Windows의 Environment.ProcessorCount 동작

Windows에서 Environment.ProcessorCount 속성은 이제 프로세스 선호도 및 작업 개체의 CPU 사용률에 대한 하드 한도를 고려합니다.

변경 내용 설명

이전 .NET 버전에서는 Windows의 Environment.ProcessorCount 속성이 머신의 논리 프로세서 수를 반환합니다. 이 속성은 프로세스 선호도 및 작업 개체의 CPU 사용률에 대한 하드 한도를 무시합니다. 이 Windows 동작은 해당 한도가 적용되는 Unix 기반 운영 체제의 동작과 일치하지 않습니다.

.NET 6부터 Windows의 Environment.ProcessorCount 동작이 Unix 기반 운영 체제의 동작과 일치합니다. 일반적으로는 Environment.ProcessorCount는 다음의 최솟값을 반환합니다.

  • 머신의 논리 프로세서 수
  • 프로세스가 CPU 선호도를 사용하여 실행되는 경우 프로세스의 선호도가 설정된 프로세서 수
  • 프로세스가 CPU 사용률 한도를 사용하여 실행되는 경우 다음 정수로 반올림되는 CPU 사용률 한도

다음 표에서는 논리 프로세서가 8개인 머신에서 .NET 5에서 .NET 6으로 Environment.ProcessorCount의 값이 어떻게 변경되는지 보여 줍니다.

환경 .NET 5 .NET 6
선호도가 논리 프로세서 2개로 설정된 프로세스(Windows) 8 2
선호도가 논리 프로세서 2개로 설정된 프로세스(Unix) 2 2
논리 프로세서 2개에 해당하는 값으로 제한된 CPU 사용률(Windows) 8 2
논리 프로세서 2개에 해당하는 값으로 제한된 CPU 사용률(Unix) 2 2

도입된 버전

6.0

변경 이유

이 속성은 프로세스의 병렬 처리 요소를 확인하는 데 자주 사용됩니다. 선호도 설정 및 CPU 사용률 한도에 따라 속성의 값을 제한하지 않으면 성능이 저하될 수 있음을 살펴봤습니다.

애플리케이션 또는 시스템 구성에 따라 병렬 처리 요소를 스케일 다운하기 위해 Environment.ProcessorCount를 사용하는 코드를 검토합니다. 코드에서 프로세스의 선호도 마스크 또는 작업 개체의 CPU 사용률 한도를 고려하더라도 결국 의도한 것보다 낮은 병렬 처리를 사용할 수 있습니다.

Environment.ProcessorCount가 머신의 총 논리 프로세서 수를 반환하도록(예: 사용자에게 표시하기 위해) 하는 코드를 검토합니다. 대신 GetSystemInfo 또는 GetNativeSystemInfo Win32 API에 대한 PInvoke 호출을 사용할 수 있습니다.

이 변경으로 인해 코드의 성능이 더 저하되면 DOTNET_PROCESSOR_COUNT 환경 변수를 사용하여 .NET 런타임에서 사용할 수 있고 Environment.ProcessorCount 속성으로 보고될 것으로 생각되는 프로세서 수를 재정의할 수 있습니다. 예를 들어 DOTNET_PROCESSOR_COUNT를 4로 설정하면 Environment.ProcessorCount는 모든 프로세스 선호도 및 CPU 사용률 한도를 무시하고 4를 반환합니다. .NET 5 동작을 모방하려면 환경 변수를 %NUMBER_OF_PROCESSORS%로 설정합니다.

영향을 받는 API