Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 221|Risposta: 1

[Fonte] . Coda di priorità PriorityQueue in NET6

[Copiato link]
Pubblicato il 20-10-2025 10:02:53 | | | |
.NET 6 introduce un nuovo tipo di collezione, PriorityQueue, che, come suggerisce il nome, aggiunge il supporto prioritario sopra la normale Queue. Nota: Lo èNon sicuro per filettature, devi prestare attenzione alle questioni di sicurezza del filo.

Fonte:Il login del link ipertestuale è visibile.

Inizia

Diamo un'occhiata a un esempio semplice di utilizzo:
Esempio di output:



Puoi vedere che l'ordine dell'output è opposto a quello che abbiamo aggiunto: PriorityQueue inizia con la priorità minima quando si dequeue, più piccolo è il valore, più alta è la priorità, più alta è la priorità, più alta è la priorità, più alta è l'output, se vogliamo prima l'output massimo, va bene? La risposta è sì, ma dobbiamo specificare le nostre regole di confronto delle priorità, puoi fare riferimento al seguente esempio

Scene

Con l'auto-ordinamento con priorità, possiamo considerare l'uso di PriorityQueue quando serve un po' di auto-ordinamento

Coda di messaggi

Con PriorityQueue, può essere implementata una coda di messaggi prioritari, permettendo agli utenti di specificare la priorità di un messaggio durante l'invio di un messaggio, e questa sarà prioritizzata durante il consumo.

Nell'esempio sopra, specifichiamo un int come tipo di Priorità di default e uniamo alcuni messaggi nella coda, ma spesso ci sono molti messaggi e possono esserci situazioni con la stessa priorità, che possiamo usaretempo e intelligenza come tipo di priorità federataPuoi fare riferimento al seguente esempio:
Un esempio di output è il seguente:



Dai risultati sopra descritti, si può vedere che, nel caso della priorità, prima elaboreremo i messaggi con meno tempo, oppure possiamo personalizzare il metodo di ordinamento secondo le nostre esigenze e la logica di confronto delle priorità.

Rango

PriorityQueue può essere utilizzato anche in molte applicazioni di classificazione, come una classificazione delle prestazioni degli studenti

Dai un'occhiata al codice di esempio qui sotto:
La lista sopra è una lista di voti, basta scrivere qualche dato di test, tramite UnorderedItems di PriorityQueue possiamo ottenere i dati prima di ordinare, ed è anche l'ordine in cui entriamo nella coda (Enqueue), il confronto predefinito è il piccolo, cioè il punteggio più basso è il primo, poi vogliamo ordinare dal più grande al più piccolo per personalizzare il metodo di confronto.

L'High2LowComparer sopra è un confronto personalizzato, che in realtà è un inverso del risultato del confronto, e il codice è il seguente:
L'output sopra è il seguente:



Più

Esiste un tipo di dati zset (sortedSet) in Redis che può fare cose simili, ma ci sono ancora alcune differenze tra zset e PriorityQueue, zset è un set, una collezione che deduplica automaticamente, mentre PriorityQueue è comunque una Queue non verrà deduplicata, zset può modificare la priorità (punteggio) dell'elemento corrispondente, ma PriorityQueue Attualmente, non è supportato modificare la corrispondente priorità di un elemento

PriorityQueue può risolvere alcuni dei nostri problemi, ma ci sono alcune cose da tenere a mente quando lo si usa:

  • Innanzitutto, se la priorità è la stessa, l'ordine dell'output può essere diverso, determinato dal suo algoritmo interno di implementazione, e l'ordine non può essere strettamente garantito
  • PriorityQueue non è thread-safe, e i problemi thread-safe devono essere segnalati
  • Il metodo Peek in PriorityQueue recupererà solo l'elemento successivo nella coda, ma non lo rimuoverà dalla coda
(Fine)




Precedente:Analisi crawler del centro commerciale Douyin posizionando 6 dei, analisi di controllo rischio, ora dovrebbe essere 7 dei X-Perseus
Prossimo:Collegamenti con conoscenze relative all'EBPF
 Padrone di casa| Pubblicato il 20-10-2025 10:09:05 |
Scenari applicativi tipici

Chiamate d'emergenza ospedaliere, sistema di pianificazione delle attività, ad esempio: chiamata prioritaria per pazienti critici, il codice è il seguente:
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com