Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 221|Resposta: 1

[Fonte] . Fila de prioridade PriorityQueue no NET6

[Copiar link]
Postado em 20-10-2025 10:02:53 | | | |
O .NET 6 introduz um novo tipo de coleção, PriorityQueue, que, como o nome sugere, adiciona suporte a prioridades sobre a Queue comum. Nota: Ele éNão seguro para rosca, você precisa prestar atenção às questões de segurança da rosca.

Fonte:O login do hiperlink está visível.

Começar

Vamos dar uma olhada em um exemplo simples de uso:
Exemplo de saída:



Você pode ver que a ordem da saída é oposta à ordem que adicionamos, a PriorityQueue começa com a menor prioridade ao ser desenfilada, quanto menor o valor, maior a prioridade, maior a prioridade, maior a prioridade, maior a prioridade, maior a prioridade da saída, se quisermos a saída máxima primeiro, está tudo bem? A resposta é sim, mas precisamos especificar nossas próprias regras de comparação de prioridades, você pode se referir ao seguinte exemplo

Cenas

Com a ordenação automática com prioridade, podemos considerar usar a PriorityQueue quando precisarmos fazer uma auto-ordenação

Fila de Mensagens

Com o PriorityQueue, uma fila de mensagens prioritárias pode ser implementada, permitindo que os usuários especifiquem a prioridade de uma mensagem ao enviar uma mensagem, e ela será priorizada ao consumir.

No exemplo acima, especificamos um int como o tipo de Prioridade por padrão, e mesclamos algumas mensagens na fila, mas geralmente há muitas mensagens, e podem existir situações com a mesma prioridade, que podemos usarTempo e INT como um tipo de prioridade federadaVocê pode se referir ao seguinte exemplo:
Um exemplo da saída é o seguinte:



A partir dos resultados acima, pode-se ver que, no caso da prioridade, primeiro processaremos as mensagens com menos tempo, ou podemos personalizar o método de ordenação de acordo com nossas próprias necessidades e personalizar a lógica de comparação de prioridades.

Classificar

O PriorityQueue também pode ser usado em muitos aplicativos de ranking, como uma classificação do desempenho dos alunos

Dê uma olhada no código de exemplo abaixo:
A lista acima é uma lista de notas, basta escrever alguns dados de teste, através do UnorderedItems do PriorityQueue podemos obter os dados antes de ordenar, e também é a ordem em que entramos na fila (Enqueue), a comparação padrão é a pequena primeiro, ou seja, a pontuação mais baixa é a primeira, depois queremos ordenar do maior para o menor precisamos personalizar o método de comparação.

O High2LowComparer acima é uma comparação personalizada, que na verdade é uma inversa do resultado da comparação, e o código é o seguinte:
A saída acima é a seguinte:



Mais

Existe um tipo de dado zset (sortedSet) no Redis que pode fazer coisas semelhantes, mas ainda existem algumas diferenças entre zset e PriorityQueue, zset é um conjunto, uma coleção que se desduplica automaticamente, enquanto PriorityQueue ainda é uma Queue não será desduplicada, zset pode modificar a prioridade (score) do elemento correspondente, mas PriorityQueue Atualmente, não é suportado modificar a prioridade correspondente de um elemento

O PriorityQueue pode resolver alguns dos nossos problemas, mas há algumas coisas para ter em mente ao usá-lo:

  • Primeiramente, se a prioridade for a mesma, a ordem da saída pode ser diferente, o que é determinado pelo algoritmo interno de implementação, e a ordem não pode ser estritamente garantida
  • O PriorityQueue não é seguro para threads, e questões seguras para threads precisam ser observadas
  • O método Peek no PriorityQueue só vai buscar o elemento seguinte na fila, mas não o remove da fila
(Fim)




Anterior:Análise do crawler do Douyin Mall posicionando 6 deuses, análise de controle de risco, agora deveria ser 7 deuses X-Perseu
Próximo:Links para conhecimento relacionado à EBPF
 Senhorio| Postado em 20-10-2025 10:09:05 |
Cenários típicos de aplicação

Chamadas de emergência hospitalar, sistema de agendamento de tarefas, por exemplo: chamada prioritária para pacientes gravemente doentes, o código é o seguinte:
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com