Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 221|Odpowiedź: 1

[Źródło] . Priorytetowa kolejka priorytetowa PriorytetyQueue w NET6

[Skopiuj link]
Opublikowano 2025-10-20 10:02:53 | | | |
.NET 6 wprowadza nowy typ kolekcji, PriorityQueue, który, jak sama nazwa wskazuje, dodaje wsparcie dla priorytetów oprócz zwykłej kolejki. Uwaga: JestBezpieczna dla gwintów, musisz zwracać uwagę na kwestie bezpieczeństwa wątków.

Źródło:Logowanie do linku jest widoczne.

Rozpocząć

Przyjrzyjmy się prostemu przykładowi użycia:
Przykładowe wyjście:



Widać, że kolejność wyjść jest odwrotna do kolejności, którą dodaliśmy. PriorytetyQueue zaczyna się od najmniejszego priorytetu podczas dequeue, im mniejsza wartość, tym wyższy priorytet, tym wyższy priorytet, wyższy priorytet, tym wyższy priorytet, tym większy priorytet, tym większy priorytet wyjścia, jeśli chcemy najpierw maksymalny wynik, czy to w porządku? Odpowiedź brzmi tak, ale musimy określić własne reguły porównania priorytetów, możesz odnieść się do następującego przykładu

Sceny

Dzięki automatycznemu sortowaniu z priorytetem możemy rozważyć użycie PriorityQueue, gdy potrzebujemy automatycznego sortowania

Kolejka wiadomości

Dzięki PriorityQueue można zaimplementować kolejkę wiadomości priorytetowych, pozwalającą użytkownikom określić priorytet wiadomości podczas wysyłania wiadomości, a podczas jej konsumowania będzie ona priorytetowana.

W powyższym przykładzie domyślnie określamy int jako typ Priorytetu i łączymy niektóre wiadomości z kolejką, ale często jest wiele wiadomości i mogą wystąpić sytuacje o tym samym priorytecie, które możemy wykorzystaćCzas i inteligencja jako federowany typ priorytetuMożesz odnieść się do następującego przykładu:
Przykładem wyjścia jest następujący:



Z powyższych wyników wynika, że w przypadku priorytetu najpierw przetwarzamy wiadomości w krótszym czasie, albo możemy dostosować metodę sortowania do własnych potrzeb oraz dostosować logikę porównania priorytetów.

Ranga

PriorytetyQueue może być również wykorzystywana w wielu aplikacjach rankingowych, takich jak ranking wyników uczniów

Spójrz na przykładowy kod poniżej:
Powyższa lista to lista ocen, wystarczy zapisać kilka danych testowych, dzięki UnorderedItems w PriorityQueue możemy pobrać dane przed sortowaniem, a także jest to kolejność dołączania do kolejki (Enqueue), domyślne porównanie to najpierw małe (czyli najniższy wynik, a następnie chcemy posortować od największego do najmniejszego, musimy dostosować metodę porównania).

Powyższy High2LowComparer to niestandardowe porównanie, które jest w rzeczywistości odwrotnością wyniku porównania, a kod wygląda następująco:
Powyższy wynik wygląda następująco:



Więcej

W Redis istnieje typ danych zset(sortedSet), które potrafią robić podobne rzeczy, ale nadal istnieją pewne różnice między zset a PriorityQueue – zset to zset, czyli kolekcja, która automatycznie się deduplikuje, podczas gdy PriorityQueue nadal jest kolejką i nie zostanie deduplikowany, zset może modyfikować priorytet (wynik) odpowiadającego elementu, ale PriorityQueue Obecnie nie jest obsługiwana modyfikacja odpowiadającego priorytetu elementu

PriorityQueue może rozwiązać niektóre nasze problemy, ale warto pamiętać o kilku rzeczach podczas korzystania z niego:

  • Po pierwsze, jeśli priorytet jest ten sam, kolejność wyjścia może być inna, co jest określane przez wewnętrzny algorytm implementacyjny, a kolejność nie może być ściśle gwarantowana
  • PriorytetyQueue nie jest bezpieczna dla wątków, a problemy z bezpieczeństwem wątków należy zwrócić uwagę
  • Metoda Peek w PriorityQueue pobiera tylko nadchodzący element w kolejce, ale nie usuwa go z kolejki
(Koniec)




Poprzedni:Analiza crawlera w centrum handlowym Douyin pozycjonuje 6 bogów, analiza kontroli ryzyka, teraz powinno być 7 bogów X-Perseusz
Następny:Linki do wiedzy związanej z EBPF
 Ziemianin| Opublikowano 2025-10-20 10:09:05 |
Typowe scenariusze zastosowań

Wezwania do szpitala na nagłe wezwania, system planowania zadań, na przykład: wezwanie priorytetowe dla pacjentów w stanie krytycznym, kod jest następujący:
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com