otium/queue 是 go 实现的后台处理任务队列,轻巧,值得推荐。

go queue

一个简单的应用场合,用户上传一个头像,要生成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 转摘请注明来源