# blocking-priority-queue **Repository Path**: movee/blocking-priority-queue ## Basic Information - **Project Name**: blocking-priority-queue - **Description**: 基于gods/queues/priorityqueue实现的高性能、轻量、多线程安全的优先级队列 - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-12-30 - **Last Updated**: 2023-12-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # blocking-priority-queue #### 介绍 基于gods/queues/priorityqueue实现的高性能、轻量、多线程安全的优先级队列 #### 使用说明 ```go package queue import ( "context" "testing" "time" ) type message struct { pri int } func (m *message) Priority() int { return m.pri } func TestNewBlockingPriorityQueue(t *testing.T) { ctx, cancelFunc := context.WithCancel(context.Background()) defer cancelFunc() q, _ := NewBlockingPriorityQueue[*message](ctx, 10, ClosePolicyClose) q.Start() q.Push(&message{pri: 10}) q.Push(&message{pri: 20}) q.Push(&message{pri: 1}) time.Sleep(10 * time.Millisecond) m, err := q.Pop() if err != nil { t.Error("pop failed") } if m.pri == 1 { t.Logf("test success, m: %v", m) } else { t.Errorf("test failed, ") } m, err = q.Pop() if err != nil { t.Error("pop failed") } if m.pri == 10 { t.Logf("test success, m: %v", m) } else { t.Errorf("test failed, ") } m, err = q.Pop() if err != nil { t.Error("pop failed") } if m.pri == 20 { t.Logf("test success, m: %v", m) } else { t.Errorf("test failed, ") } } ``` 结果输出: ```bash % cd ./blkpq % go test PASS ok blocking-priority-queue/blkpq 1.451s ```