有关协程并发的问题

我是用两种找最大值的方法对比 第一种是普通的找最大值 第二种是将数据分成若干组以后 每组用协程并发找最大值 用waitGroup等待各个协程完成 然后再在结果集里找最大值 这两种对比 发现数据量大的时候 第二种会快一半左右 但是随着我增加协程数量 比如10个并发和20个并发 速度却并没有变快 请问是什么原因?

共 5 个回复


stevewang

因为你的任务是CPU密集型的,当各个CPU/核都满负载的时候,再增加并发数并不能提高计算速度。

# 0

sneermorn

好像确实是这样 和cpu的核心数有关 那是不是说单核 就无法并发了? 这样的话并发的使用感觉有点局限啊 如何能做到并发处理比CPU核心数多的协程?

# 2

stevewang

并发和并行的概念不一样。
对于单核来说,并发不受限制,但是影响并行能力。
例如,单核也可以运行多任务OS,多任务实际就是一种并发。

# 3

pathbox

想对cpu密集型任务增加速度就加cpu了。
在cpu不变下,想通过并发或并行来增速是达不到效果的。并发或并行对于 IO密集型任务的效果最大

# 4