2 回答
![?](http://img1.sycdn.imooc.com/545862770001a22702200220-100-100.jpg)
TA贡献1776条经验 获得超12个赞
在编写并行代码以提高速度时,请始终记住Amdahl 定律。他的定律给出了关于何时停止打扰的非常有用的经验法则,可以解释为“顺序位将成为瓶颈”。
如果你忽视阿姆达尔定律,你最终可能会浪费时间去追逐不可能的目标。相反,您可能需要考虑更广泛的并发问题,以在多个地方或以多种方式解决任何性能问题。
通常,您使用的方法是数据并行:跨多个进程的数据结构独立段的“几何”分解。
您还可以考虑功能分解(本质上是管道),其中不同阶段执行不同的工作。
然后是特殊的时间情况,使用 master-worker 或“数据农业”作为实现并行性的一种方式。
所有这些往往需要真正的并行硬件才能真正有用。Tidmus/Chalmers实用并行处理:并行解决问题简介(ISBN 1850321353) 中对使用这些技术的多处理进行了很好但很陈旧的总结。
![?](http://img1.sycdn.imooc.com/545868cd00013bbb02200220-100-100.jpg)
TA贡献1942条经验 获得超3个赞
您的 for 循环将创建 1000 个 goroutine,runtime.GOMAXPROCS(4)
设置可以使用的 CPU 数量。
GOMAXPROCS 设置可以同时执行的最大 CPU 数量并返回之前的设置。如果 n < 1,则不会更改当前设置。可以用NumCPU查询本地机器上逻辑CPU的数量。当调度程序改进时,此调用将消失。
并在同一页面上:
GOMAXPROCS 变量限制了可以同时执行用户级 Go 代码的操作系统线程的数量。代表Go代码在系统调用中可以阻塞的线程数没有限制;这些不计入 GOMAXPROCS 限制。这个包的 GOMAXPROCS 函数查询和更改限制。
- 2 回答
- 0 关注
- 185 浏览
添加回答
举报