開發(fā)一個小型任務隊列系統(tǒng)在Golang中其實并不復雜,尤其適合處理異步任務、定時任務或后臺作業(yè)。你可以基于 goroutine 和 channel 構建一個輕量級但高效的系統(tǒng),無需引入外部依賴如 RabbitMQ 或 Kafka。下面是一個實用的實現(xiàn)思路和代碼示例。
一個基本的任務隊列包含以下幾個部分:
我們可以把任務定義為一個函數(shù)類型,便于傳遞和執(zhí)行。
type Task func() <p>// 示例任務 func PrintTask(msg string) Task { return func() { fmt.Printf("Processing: %s\n", msg) time.Sleep(1 * time.Second) // 模擬耗時操作 fmt.Printf("Completed: %s\n", msg) } }</p>
使用固定數(shù)量的 worker 從 channel 中讀取任務并執(zhí)行。
立即進入“豆包AI人工智官網(wǎng)入口”;
立即學習“豆包AI人工智能在線問答入口”;
type WorkerPool struct { workers int taskQueue chan Task } <p>func NewWorkerPool(workers, queueSize int) *WorkerPool { return &WorkerPool{ workers: workers, taskQueue: make(chan Task, queueSize), } }</p><p>func (wp *WorkerPool) Start() { for i := 0; i < wp.workers; i++ { go func() { for task := range wp.taskQueue { task() } }() } }</p><p>func (wp *WorkerPool) Submit(task Task) { wp.taskQueue <- task }</p><p>func (wp *WorkerPool) Stop() { close(wp.taskQueue) }</p>
啟動工作池,提交多個任務,觀察并發(fā)執(zhí)行效果。
func main() { pool := NewWorkerPool(3, 10) // 3個worker,最多緩存10個任務 pool.Start() <pre class='brush:php;toolbar:false;'>// 提交任務 for i := 0; i < 5; i++ { pool.Submit(PrintTask(fmt.Sprintf("Task %d", i))) } // 等待一段時間讓任務完成(實際項目可用 WaitGroup) time.Sleep(6 * time.Second) pool.Stop()
}
輸出會看到任務被并發(fā)執(zhí)行,最多同時運行3個,其余在隊列中等待。
基本上就這些。這個模型足夠支撐大多數(shù)中小型場景,比如郵件發(fā)送、日志處理、數(shù)據(jù)抓取等。不復雜但容易忽略細節(jié),比如 channel 緩沖大小和 worker 異常退出問題。合理設計后,它能穩(wěn)定運行很長時間。
以上就是如何使用Golang開發(fā)小型任務隊列系統(tǒng)的詳細內容,更多請關注php中文網(wǎng)其它相關文章!
每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進程會占用資源并降低性能。幸運的是,許多工具可以讓 Windows 保持平穩(wěn)運行。
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號