为什么 Goroutines 的执行时间相差很大?
Why does the execution time of Goroutines differ significantly?
我只是在测量一组 goroutine 的执行时间。这意味着:
我开始测量,然后启动 20 个 goroutine 并在它们完成后立即停止测量。我重复该过程 4 次,然后比较 4 次执行时间。
有时,这些执行时间会有很大差异:
20 个协程中的第一个 运行:1.2 毫秒
20 个协程中的第 2 个 运行:1.9 毫秒
20 个协程中的第 3 个 运行:1.4 毫秒
20 个协程中的第 4 个 运行:17.0 毫秒!
为什么有时差异如此之大?有什么办法可以避免吗?
Why does it sometimes differ so significantly?
执行时间在某些时候总是不可预测的,正如您的问题评论中提到的(CPU、磁盘负载、内存等)
Is there any way to avoid it?
有一种方法可以使您的测量更有用。 Go 有一个内置的基准测试工具(这里有一个关于如何正确使用它的 guide)。此工具运行您的代码的次数刚好足以确定确定性的执行时间。
除了显示代码的平均执行时间外,它还可以显示有用的内存信息。
我只是在测量一组 goroutine 的执行时间。这意味着:
我开始测量,然后启动 20 个 goroutine 并在它们完成后立即停止测量。我重复该过程 4 次,然后比较 4 次执行时间。
有时,这些执行时间会有很大差异:
20 个协程中的第一个 运行:1.2 毫秒
20 个协程中的第 2 个 运行:1.9 毫秒
20 个协程中的第 3 个 运行:1.4 毫秒
20 个协程中的第 4 个 运行:17.0 毫秒!
为什么有时差异如此之大?有什么办法可以避免吗?
Why does it sometimes differ so significantly?
执行时间在某些时候总是不可预测的,正如您的问题评论中提到的(CPU、磁盘负载、内存等)
Is there any way to avoid it?
有一种方法可以使您的测量更有用。 Go 有一个内置的基准测试工具(这里有一个关于如何正确使用它的 guide)。此工具运行您的代码的次数刚好足以确定确定性的执行时间。
除了显示代码的平均执行时间外,它还可以显示有用的内存信息。