gpt4 book ai didi

Golang 并行性

转载 作者:数据小太阳 更新时间:2023-10-29 03:34:18 25 4
gpt4 key购买 nike

我最近阅读了很多关于 Go 中的并行性和并发性的文章,但我无法理解它。当我在看书的时候 this article about concurrency and parallelism in Go ,我遇到过这个声明:

We can see that the goroutines are truly running in parallel. Both goroutines start running immediately and you can see them both competing for standard out to display their results.

此声明与此程序相关:

package main

import (
"fmt"
"runtime"
"sync"
)

func main() {
runtime.GOMAXPROCS(2)

var wg sync.WaitGroup
wg.Add(2)

fmt.Println("Starting Go Routines")
go func() {
defer wg.Done()

for char := ‘a’; char < ‘a’+26; char++ {
fmt.Printf("%c ", char)
}
}()

go func() {
defer wg.Done()

for number := 1; number < 27; number++ {
fmt.Printf("%d ", number)
}
}()

fmt.Println("Waiting To Finish")
wg.Wait()

fmt.Println("\nTerminating Program")
}

哪些输出:

Starting Go Routines
Waiting To Finish
a b 1 2 3 4 c d e f 5 g h 6 i 7 j 8 k 9 10 11 12 l m n o p q 13 r s 14
t 15 u v 16 w 17 x y 18 z 19 20 21 22 23 24 25 26
Terminating Program

那么,这是否意味着在运行时来自 goroutines 的 2 个周期同时执行(所以此时我们可以调用 Go 并行语言)或者调度器只是在这两个线程之间切换上下文(可能在 fmt.Printf 调用) 并且一次只执行一个周期(并发性,而不是真正的并行性,正如作者在上面的引述中提到的那样)?

我很困惑。

最佳答案

在您的情况下,打印 a-z 和 1-27 的函数同时启动,您正在等待两个 go 例程结束。虽然有多个 go 例程,但您的想法必须是并发的,但如果您的硬件支持,它们可能会并行运行。

Concurreny is not parallelism

上下文切换也很繁重,所以大多数时候它们很可能没有完成。 Go 例程非常轻巧,可以同时运行数百个例程。

关于Golang 并行性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52928162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com