为什么我的程序在没有goroutines的情况下运行得更快

时间:2019-06-28 03:19:52

标签: go

您可以在此处查看代码:

它输出:

Linear Search took: 8.382931ms
Conc Search took: 19.413568ms
Conc Two Search took: 16.023011ms
Conc 2 Search With Done Check Delay took: 9.608122ms

两个并发搜索需要16到21毫秒之间的时间。但是总是比线性搜索要慢。

有人可以向我提出一些关于为什么会这样以及将来如何正确调试的想法吗?

有关代码要测​​试的内容的一些背景:

  • 线性搜索:从2-sqrt(n)开始线性检查是否存在n的除数
  • Conc Search:创建N个通道,将它们“合并”为一个通道(用于从stackoverflow / medium合并的代码),然后将搜索所需的数字分成N个间隔,并进行常规线性搜索。如果其中之一为假,它将返回假(关闭“完成”通道和其他goroutines)
  • Conc Search二:仅创建两个通道,不要“合并”它们,将任务分为两个间隔并启动go例程。然后让代码等待每个例程。如果第一个说的不是素数,它将关闭另一个执行例程(通过“完成”通道)
  • Conc 2 Search with Done Check Delay花费了:创建两个通道,与上面类似,但是仅每100次迭代检查一次“完成”

我尝试了什么?

我唯一的想法是,如此频繁地检查“完成”频道会花费很多时间。但这似乎不是全部问题。同样如果是,我如何找到“最佳”循环数量以检查“完成”通道。

代码:https://github.com/kennethgoodman/learning-golang/blob/master/concurrentPrimeChecker.go

实际:

Linear Search took: 8.382931ms
Conc Search took: 19.413568ms
Conc Two Search took: 16.023011ms
Conc 2 Search With Done Check Delay took: 9.608122ms

期望结果是线性结果除以在不同CPU上运行的goroutine的数量。

0 个答案:

没有答案