이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 221|회답: 1

[출처] . NET6의 우선순위 큐

[링크 복사]
2025-10-20 10:02:53에 게시됨 | | | |
.NET 6은 이름에서 알 수 있듯이 일반 큐 위에 우선순위 지원을 추가하는 새로운 컬렉션 타입인 PriorityQueue를 도입했습니다. 참고: 그는스레드 안전 금지스레드 안전 문제에 주의를 기울여야 합니다.

근원:하이퍼링크 로그인이 보입니다.

시작

간단한 사용 예시를 살펴보겠습니다:
예시 출력물:



출력 순서가 우리가 추가한 순서와 반대임을 알 수 있습니다. PriorityQueue는 디큐 시 가장 낮은 우선순위로 시작합니다. 값이 작을수록 우선순위가 높아지고, 우선순위가 높으며, 우선순위가 높을수록 출력도 더 높습니다. 최대 출력을 먼저 원한다면 괜찮은가요? 답은 '예'입니다. 하지만 우선순위 비교 규칙을 명확히 해야 합니다. 다음 예시를 참고할 수 있습니다

장면

우선순위가 있는 자동 정렬을 사용할 때, 자동 정렬이 필요할 때 PriorityQueue를 사용하는 것을 고려할 수 있습니다

메시지 큐

PriorityQueue를 사용하면 우선순위 메시지 큐를 구현할 수 있어, 사용자가 메시지를 보낼 때 우선순위를 지정할 수 있고, 메시지 사용 시 우선순위가 결정됩니다.

위 예시에서는 기본적으로 정수(int)를 우선순위 타입으로 지정하고 일부 메시지를 큐에 병합하지만, 메시지가 여러 개 있고 동일한 우선순위를 가진 상황이 있을 수 있어 이를 활용할 수 있습니다시간과 지능을 연합 우선순위 유형으로 활용합니다다음 예시를 참고할 수 있습니다:
출력의 예는 다음과 같습니다:



위 결과에서 보아, 우선순위의 경우 먼저 메시지를 더 적은 시간 처리하거나, 필요에 따라 정렬 방식을 맞춤화하고 우선순위 비교 로직을 조정할 수 있습니다.



PriorityQueue는 학생 성적 순위 평가와 같은 다양한 순위 매기기에도 활용될 수 있습니다

아래 예제 코드를 살펴보세요:
위 목록은 등급 목록입니다. 몇 가지 테스트 데이터를 작성하면 정렬 전에 데이터를 얻을 수 있고, 큐에 합류하는 순서(Enqueue)도 포함됩니다. 기본 비교는 작은 점수부터 시작한 것으로, 낮은 점수가 먼저입니다. 그 다음에 가장 큰 것부터 작은 것부터 정렬하고 싶습니다. 비교 방법을 맞춤화해야 합니다.

위의 High2LowComparer는 사용자 정의 비교로, 실제로는 결과의 역례이며, 코드는 다음과 같습니다:
위의 출력은 다음과 같습니다:





Redis에도 유사한 기능을 할 수 있는 zset(sortedSet) 유형의 데이터가 있지만, zset과 PriorityQueue 사이에는 여전히 몇 가지 차이점이 있습니다. zset은 집합으로, 자동으로 중복을 제거하는 집합이고, PriorityQueue는 여전히 중복 제거되지 않는 큐입니다. zset은 해당 요소의 우선순위(score)를 수정할 수 있지만, PriorityQueue는 현재는 해당 요소의 우선순위를 수정하는 것이 지원되지 않습니다

PriorityQueue는 일부 문제를 해결해 줄 수 있지만, 사용할 때 몇 가지 주의해야 할 점이 있습니다:

  • 우선, 우선순위가 같으면 출력 순서가 달라질 수 있는데, 이는 내부 구현 알고리즘에 의해 결정되며 순서를 엄격히 보장할 수 없습니다
  • PriorityQueue는 스레드 안전이 아니며, 스레드 안전 문제는 반드시 확인해야 합니다
  • PriorityQueue의 Peek 메서드는 큐 내 다가오는 요소만 가져오지만, 큐에서 제거하지는 않습니다
(끝)




이전의:두우인 몰 크롤러 분석 6신 위치 선, 위험 통제 분석, 이제 7신 X-페르세우스가 되어야 해
다음:EBPF 관련 지식 링크
 집주인| 2025-10-20 10:09:05에 게시됨 |
일반적인 응용 시나리오

병원 응급 호출, 작업 일정 관리 시스템, 예를 들어 중증 환자에 대한 우선 호출 코드는 다음과 같습니다:
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com