다음을 통해 공유


%NUMBER_OF_PROCESSORS% 환경 변수에 잘못된 값이 표시되었을 수 있습니다.

이 문서는 환경 변수가 64개 이상의 논리 프로세서가 있는 시스템에 잘못된 값을 표시할 수 있는 %NUMBER_OF_PROCESSORS% 문제를 해결하는 데 도움이 됩니다.

논리 프로세서가 64개 이상인 64비트 Windows 시스템이 있습니다. 환경 변수를 %NUMBER_OF_PROCESSORS% 확인할 때 값이 올바르지 않으며 시스템의 총 프로세서 수보다 작습니다. 예를 들어 논리 프로세서가 72개인 시스템에는 두 개의 프로세서 그룹이 있고 각 그룹에는 36개의 논리 프로세서가 포함됩니다. 값은 %NUMBER_OF_PROCESSORS% 36이지만 72로 예상됩니다.

논리 프로세서가 64개 이상인 시스템에 대한 지원

논리 프로세서는 운영 체제, 애플리케이션 또는 드라이버의 관점에서 논리 컴퓨팅 엔진입니다. 64개 이상의 논리 프로세서가 있는 시스템에 대한 지원은 프로세서 그룹 생성에 따라 Windows 7에 추가되었습니다.

프로세서 그룹은 운영 체제에서 단일 일정 엔터티로 처리되는 최대 64개의 논리 프로세서 집합이며, 각 프로세스는 기본적으로 하나의 프로세서 그룹에만 할당됩니다.

현재 프로세서 그룹만 계산됩니다.

환경 변수는 %NUMBER_OF_PROCESSORS% 프로세스에 대해 할당된 프로세서 그룹의 프로세서 수를 반영하며 Windows 세션 관리자(smss.exe)에서 상속됩니다. Windows 11 및 Windows Server 2022 이전에는 smss.exe 프로세서 그룹을 인식하지 못했습니다. 기본 스케줄러 동작은 애플리케이션을 단일 프로세서 그룹에 할당하는 것이었습니다. 이 경우 현재 프로세서 그룹만 계산됩니다.

시스템 시작 시 시스템 프로세스에만 다중 그룹 선호도가 할당됩니다. 시스템의 전체 프로세서 집합을 사용하려면 다른 모든 프로세스에서 다른 그룹에 스레드를 할당해야 합니다.

애플리케이션이 여러 그룹을 사용하여 64개 이상의 프로세서에서 실행해야 하는 경우 스레드를 실행할 위치를 결정해야 합니다. 애플리케이션은 스레드 친화성을 원하는 그룹으로 설정해야 합니다.

Windows 11 또는 Windows Server 2022로 시스템 업데이트

시스템을 Windows 11 또는 Windows Server 2022로 업데이트할 수 있습니다. Windows 11 및 Windows Server 2022부터 64개 이상의 프로세서가 있는 컴퓨터에서 프로세스와 스레드는 기본적으로 여러 그룹에 걸쳐 시스템의 모든 프로세서에 걸쳐 있습니다. 또한 Windows 11 버전 22H2 %NUMBER_OF_PROCESSORS% 부터 환경 변수는 여러 프로세서 그룹에 분산되어 있더라도 시스템의 총 프로세서 수를 반영합니다.

애플리케이션 스레드 친화성을 원하는 그룹으로 설정

운영 체제가 Windows 11 또는 Windows Server 2022 이전인 경우 애플리케이션 스레드 친화성을 원하는 그룹으로 설정할 수 있습니다.

CreateRemoteThreadEx 함수와 함께 PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY 확장 특성을 사용하여 스레드를 만들 때 스레드의 선호도를 지정할 수 있습니다. 스레드를 만든 후 SetThreadAffinityMask 또는 SetThreadGroupAffinity 함수를 호출하여 선호도를 변경할 수 있습니다.

자세한 정보