简单的 Go 并发示例

使用并发来提高执行速度的简单示例是什么?我发现了许多使用并行的示例,但没有一个只使用并发。


函数式编程
浏览 176回答 1
1回答

一只萌萌小番薯

并发和并行是两个相关但不同的东西。这个话题很广泛,但让我在这里简单地关注一下速度。并发与如何设计和构建程序有关,如果可以应用并行性,那么软件可能运行得更快。例如; 如果您有一个循环,例如x := []int{1, 2, 3, 4, 5, 6}for i := range x {  x[i] *= x[i];}这个程序“感觉”是并发的,因为计算数组中每个数字平方的读取和写入指令在逻辑上彼此独立。因此,理论上您可以以并发方式设计代码,例如使用 goroutine:x := []int{1, 2, 3, 4, 5, 6}for i := range x {  go func(j int) { x[j] *= x[j]; }(i)}wait_the_goroutines();现在假设在这个例子中没有数据竞争,并且每次更新都可以独立完成。好吧,这些值的更新可以并行进行,因为并发设计允许这样做。使用旧代码,更新是串行设计的。当计算机(CPU、GPU 等)能够同时处理多条指令时,并行性就出现了。如果您的计算机中有一个内核,则上述 goroutine 不太可能并行执行。如果您有多个内核,它们可能会并行执行 - 因为它们可以并行执行,但是您无法实际控制计算机的并行硬件如何用于并行执行代码。这是 Go 运行时的任务。从某种意义上说,并发并不是用来提高执行速度的:并行是。并发用于允许代码的正确并行化。因此,您无法真正获得这样的示例,因为即使您可以获得“非常并发”的代码,执行速度也受限于两件事:你可以并行多少go runtime 将如何调度 goroutines。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go