【问题标题】:Why does the execution time of Goroutines differ significantly?为什么 Goroutine 的执行时间差异很大?
【发布时间】:2019-03-10 11:17:03
【问题描述】:

我只是在测量一组 goroutine 的执行时间。这意味着:

我开始测量,然后启动 20 个 goroutine,并在它们完成后立即停止测量。我重复该过程 4 次,然后比较 4 次执行时间。

有时,这些执行时间差异很大:

20 个 goroutine 的第一次运行:1.2 毫秒
20 个 goroutine 的第二次运行:1.9 毫秒
20 个 goroutine 的第 3 次运行:1.4 毫秒
20 个 goroutine 的第 4 次运行:17.0 毫秒!

为什么有时差异如此之大?有什么办法可以避免吗?

【问题讨论】:

  • 4 不是一个有意义的样本量。您应该运行这样的测试数千次才能获得有意义的结果。
  • 至于差异的原因:任何数量的原因。在缓慢运行时,可能正在后台运行某些东西,恰好需要 CPU、磁盘或其他共享资源。

标签: go runtime execution goroutine


【解决方案1】:

为什么有时差异如此之大?

执行时间在某些时候总是不可预测的,正如您在 cmets 中提到的问题(CPU、磁盘负载、内存等)

有什么办法可以避免吗?

有一种方法可以让您的测量结果更有用。 Go 有一个内置的基准测试工具(这里有一个 guide 关于如何正确使用它)。此工具运行您的代码的次数刚好足以确定一个确定性的执行时间。

除了显示代码的平均执行时间之外,它还可以显示有用的内存信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 2020-03-15
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    相关资源
    最近更新 更多