IExecutionResource 구조체
하드웨어 스레드에 대한 추상화입니다.
구문
struct IExecutionResource;
멤버
공용 메서드
이름 | 설명 |
---|---|
IExecutionResource::CurrentSubscriptionLevel | 이 실행 리소스가 나타내는 기본 하드웨어 스레드와 현재 연결된 활성화된 가상 프로세서 루트 및 구독된 외부 스레드의 수를 반환합니다. |
IExecutionResource::GetExecutionResourceId | 이 실행 리소스가 나타내는 하드웨어 스레드에 대한 고유 식별자를 반환합니다. |
IExecutionResource::GetNodeId | 이 실행 리소스가 속한 프로세서 노드에 대한 고유 식별자를 반환합니다. |
IExecutionResource::Remove | 이 실행 리소스를 Resource Manager에 반환합니다. |
설명
실행 리소스는 독립 실행형이거나 가상 프로세서 루트와 연결될 수 있습니다. 독립 실행형 실행 리소스는 애플리케이션의 스레드가 스레드 구독을 만들 때 만들어집니다. ISchedulerProxy::SubscribeThread 및 ISchedulerProxy::RequestInitialVirtualProcessors 메서드는 스레드 구독을 만들고 구독을 나타내는 인터페이스를 반환 IExecutionResource
합니다. 스레드 구독을 만드는 것은 Resource Manager가 스케줄러에 할당하는 가상 프로세서 루트와 함께 지정된 스레드가 스케줄러에 대기 중인 작업에 참여한다는 것을 Resource Manager에 알리는 방법입니다. Resource Manager는 이 정보를 사용하여 할 수 있는 하드웨어 스레드의 과다 구독을 방지합니다.
상속 계층 구조
IExecutionResource
요구 사항
헤더: concrtrm.h
네임스페이스: 동시성
IExecutionResource::CurrentSubscriptionLevel 메서드
이 실행 리소스가 나타내는 기본 하드웨어 스레드와 현재 연결된 활성화된 가상 프로세서 루트 및 구독된 외부 스레드의 수를 반환합니다.
virtual unsigned int CurrentSubscriptionLevel() const = 0;
Return Value
현재 구독 수준입니다.
설명
구독 수준은 하드웨어 스레드와 연결된 실행 중인 스레드 수를 알려줍니다. 여기에는 Resource Manager가 구독된 스레드 형식으로 알고 있는 스레드와 스레드 프록시를 적극적으로 실행하는 가상 프로세서 루트만 포함됩니다.
매개 변수 doSubscribeCurrentThread
가 값 true
으로 설정된 ISchedulerProxy::SubscribeCurrentThread 또는 메서드 ISchedulerProxy::RequestInitialVirtualProcessors를 호출하면 하드웨어 스레드의 구독 수준이 1씩 증가합니다. 또한 구독을 IExecutionResource
나타내는 인터페이스도 반환합니다. IExecutionResource::Remove에 대한 해당 호출은 하드웨어 스레드의 구독 수준을 1씩 감소시킵니다.
IVirtualProcessorRoot::Activate 메서드를 사용하여 가상 프로세서 루트를 활성화하면 하드웨어 스레드의 구독 수준이 1씩 증가합니다. IVirtualProcessorRoot::D eactivate 또는 IExecutionResource::Remove 메서드는 활성화된 가상 프로세서 루트에서 호출될 때 구독 수준을 1씩 감소시킵니다.
Resource Manager는 구독 수준 정보를 스케줄러 간에 리소스를 이동할 시기를 결정하는 방법 중 하나로 사용합니다.
IExecutionResource::GetExecutionResourceId 메서드
이 실행 리소스가 나타내는 하드웨어 스레드에 대한 고유 식별자를 반환합니다.
virtual unsigned int GetExecutionResourceId() const = 0;
Return Value
이 실행 리소스의 기본 하드웨어 스레드에 대한 고유 식별자입니다.
설명
각 하드웨어 스레드에는 동시성 런타임에 의해 고유 식별자가 할당됩니다. 여러 실행 리소스가 연결된 하드웨어 스레드인 경우 모두 동일한 실행 리소스 식별자를 갖게 됩니다.
IExecutionResource::GetNodeId 메서드
이 실행 리소스가 속한 프로세서 노드에 대한 고유 식별자를 반환합니다.
virtual unsigned int GetNodeId() const = 0;
Return Value
프로세서 노드의 고유 식별자입니다.
설명
동시성 런타임은 프로세서 노드 그룹의 시스템에서 하드웨어 스레드를 나타냅니다. 노드는 일반적으로 시스템의 하드웨어 토폴로지에서 파생됩니다. 예를 들어 특정 소켓 또는 특정 NUMA 노드의 모든 프로세서는 동일한 프로세서 노드에 속할 수 있습니다. Resource Manager는 시스템의 총 프로세서 노드 수를 나타내는 최대 및 포함 nodeCount - 1
nodeCount
으로 시작하는 0
이러한 노드에 고유 식별자를 할당합니다.
노드 수는 GetProcessorNodeCount 함수 에서 가져올 수 있습니다.
IExecutionResource::Remove 메서드
이 실행 리소스를 Resource Manager에 반환합니다.
virtual void Remove(_Inout_ IScheduler* pScheduler) = 0;
매개 변수
pScheduler
이 실행 리소스를 제거하도록 요청하는 스케줄러에 대한 인터페이스입니다.
설명
가상 프로세서 루트와 연결된 실행 리소스뿐만 아니라 독립 실행형 실행 리소스를 Resource Manager에 반환하려면 이 메서드를 사용합니다.
ISchedulerProxy::SubscribeCurrentThread 또는 ISchedulerProxy::RequestInitialVirtualProcessors 중 하나에서 받은 독립 실행형 실행 리소스인 경우 메서드 Remove
를 호출하면 리소스가 표시할 스레드 구독이 종료됩니다. 스케줄러 프록시를 종료하기 전에 모든 스레드 구독을 종료해야 하며 구독을 만든 스레드에서 호출 Remove
해야 합니다.
인터페이스 Remove
는 IVirtualProcessorRoot
인터페이스에서 상속되기 때문에 IExecutionResource
메서드를 호출하여 리소스 관리자에 가상 프로세서 루트도 반환할 수 있습니다. IScheduler::RemoveVirtualProcessors 메서드에 대한 호출에 대한 응답으로 가상 프로세서 루트를 반환하거나 ISchedulerProxy::CreateOversubscriber 메서드에서 가져온 초과 구독된 가상 프로세서 루트를 사용하여 완료된 경우 가상 프로세서 루트를 반환해야 할 수 있습니다. 가상 프로세서 루트의 경우 스레드가 메서드를 호출 Remove
할 수 있는 제한은 없습니다.
invalid_argument
는 매개 변수 pScheduler
가 .로 NULL
설정된 경우 throw됩니다.
invalid_operation
는 매개 변수 pScheduler
가 이 실행 리소스가 만들어진 스케줄러와 다르거나, 현재 스레드가 스레드 구독을 만든 스레드와 다른 경우 독립 실행형 실행 리소스를 사용하여 throw됩니다.