리소스 디스펜서 리소스 할당 프로세스

리소스 디스펜서가 소유자로부터 리소스를 할당할 때마다 다음이 발생합니다.

  1. 리소스 디스펜서는 필요한 리소스의 유형을 설명하는 RESTYPID(리소스 종류 식별자)를 선언합니다.

  2. 리소스 디스펜서는 홀더의 IHolder::AllocResource 메서드를 호출하여 이 RESTYPID를 전달합니다.

  3. 보유자는 사용 가능한 리소스에서 후보 목록을 생성합니다. 응시자는 트랜잭션에 등록되지 않았거나 호출 개체의 트랜잭션에 이미 등록되어 있는 리소스입니다.

  4. 이러한 후보는 후보 리소스가 원하는 RESTYPID와 얼마나 잘 일치하는지(0에서 100까지) 등급이 지정된 IDispenserDriver::RateResource 메서드에 개별적으로 전달됩니다.

  5. 보유자는 리소스 디스펜서 속도가 가장 높은 리소스를 선택합니다.

  6. 리소스 디스펜서는 후보에게 100(완벽한 적합)의 리소스 등급을 할당하여 등급 루프를 일찍 종료할 수 있습니다. 리소스 디스펜서가 인리스트먼트가 저렴한 작업이라고 결론을 내리지 않는 한, 일반적으로 100 등급은 이미 제대로 등록된 후보 리소스에 대해 예약됩니다. 모든 후보 리소스(있는 경우)의 등급이 0(사용할 수 없음)인 경우 IDispenserDriver::CreateResource를 호출하여 새 리소스가 만들어집니다.

  7. 이전에 선택한 리소스가 호출 개체의 트랜잭션에 아직 등록되지 않은 경우 리소스 디스펜서의 IDispenserDriver::EnlistResource 메서드가 호출됩니다.

  8. AllocResource 메서드 호출은 인리스트먼트된 리소스를 사용하여 리소스 디스펜서로 돌아갑니다.

COM+ 리소스 디스펜서 개념

트랜잭션에 리소스 등록

할당하지 않은 리소스 추적