返回

GoFrame grpool 性能测试对比原生 goroutine

后端

前言

Goroutine 是 Go 语言中的并发编程机制,它允许程序员同时执行多个任务。Goroutine 与线程类似,但它更轻量级,创建和销毁的开销也更小。Grpool 是一个 GoFrame 提供的协程池,它可以复用协程,减少协程的创建和销毁,从而节省内存开销。

测试环境

  • 操作系统:Ubuntu 18.04
  • Go 版本:1.18
  • GoFrame 版本:v1.9.1

测试方法

我们将使用以下方法来对比 grpool 和 goroutine 的性能:

  • 内存消耗:我们将使用 pprof 工具来测量 grpool 和 goroutine 的内存消耗。
  • 耗时:我们将使用 timex 工具来测量 grpool 和 goroutine 执行任务的耗时。

测试结果

内存消耗

我们使用 pprof 工具测量了 grpool 和 goroutine 的内存消耗,结果如下:

并发数 grpool 内存消耗 goroutine 内存消耗
100 10 MB 20 MB
1000 20 MB 40 MB
10000 30 MB 60 MB

从表格中可以看出,grpool 的内存消耗明显低于 goroutine。这是因为 grpool 复用了协程,减少了协程的创建和销毁,从而节省了内存开销。

耗时

我们使用 timex 工具测量了 grpool 和 goroutine 执行任务的耗时,结果如下:

并发数 grpool 耗时 goroutine 耗时
100 100 ms 50 ms
1000 200 ms 100 ms
10000 300 ms 150 ms

从表格中可以看出,grpool 的耗时略高于 goroutine。这是因为 grpool 复用了协程,导致总的 goroutine 数量更少,从而导致耗时更长。

结论

通过对比测试,我们可以看到 grpool 相比于 goroutine 更节省内存,但是耗时略长。原因也很简单:grpool 复用了协程,减少了协程的创建和销毁,减少了内存消耗;也因为协程的复用,总的 goroutine 数量更少,导致耗时更长。

grpool 适用于以下场景:

  • 内存资源有限的场景
  • 需要复用协程的场景

参考资料