otium/queue 是 go 实现的后台处理任务队列,轻巧,值得推荐。
一个简单的应用场合,用户上传一个头像,要生成8种不同尺寸的缩略图,假设每处理一个缩略图要1秒,如果是单队列则处理完要8秒,如果同时有8个协程处理,则只需要1秒。
下面是简单的otium/queue 示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
n
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
但这样的并发任务没有传递任务的计算结果,如果需要获得计算结果,就得借助 chan 来完成。
另外一个简单的后台任务实现 https://gist.github.com/harlow/dbcd639cf8d396a2ab73 (用标准库) 《Writing worker queues, in Go》
另外推荐一个比较复杂的 RichardKnop/machinery 基于分布式消息传递的异步任务队列/作业队列。
本文网址: https://golangnote.com/topic/53.html 转摘请注明来源