我使用 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/