gpt4 book ai didi

go - 需要帮助来理解 goroutines 的这种奇怪行为

转载 作者:IT王子 更新时间:2023-10-29 02:33:55 26 4
gpt4 key购买 nike

我使用 go 例程跟踪代码:

package main

import (
"fmt"
"time"
)

func thread_1(i int) {
time.Sleep(time.Second * 1)
fmt.Println("thread_1: i: ",i)
}

func thread_2(i int) {
time.Sleep(time.Second * 1)
fmt.Println("thread_2: i: ",i)
}

func main() {
for i := 0; i < 100; i++ {
go thread_1(i)
go thread_2(i)
}

var input string
fmt.Scanln(&input)
}

我原以为每个 go 例程都会等待一秒钟,然后打印它的 i 值。

但是,两个 go 例程都等待 1 秒,并立即打印 i 的所有值。

同一上下文中的另一个问题是:我有一个服务器-客户端应用程序,其中服务器生成一个接收器去例程以从每个客户端连接的客户端接收数据。然后 receiver go routine 产生一个叫做 processor 的 worker go routine 来处理数据。可能有多个接收器 go routines,因此有多个 processor go routines。在这种情况下,某些接收器和处理器执行例程可能会无限期占用。

请帮助我理解这种行为。

最佳答案

您在一个大批量中跨越 100 个运行 thread_1 的 goroutine 和 100 个运行 thread_2 的 goroutine。这 200 个 goroutine 中的每一个都休眠一秒钟,然后打印并结束。所以是的,这种行为是可以预料的:200 个 goroutine 每 1 秒并行休眠一次,然后 200 个 goroutines 并行打印。

(我不明白你的第二个问题)

关于go - 需要帮助来理解 goroutines 的这种奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32159402/

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