0
我使用去例程下面的代碼來了解圍棋程序的這種怪異的bahaviour:需要幫助
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)
}
我期待各走各的例程將等待一秒鐘,然後打印出它的值i。
但是,兩個go例程每次等待1秒,並立即打印出i的所有值。
在同樣的上下文中的另一個問題是: 我有一個服務器端客戶端應用程序,其中服務器產生一個接收器去例行程序接收來自每個客戶端連接的客戶端數據。然後,接收器去例行程序產生一個工作者去例行程序來處理數據。可能有多個接收器去例程,因此多個處理器去例程。 在這種情況下,一些接收器和處理器去例行程序可能無限期地消耗。
請幫我理解這種行爲。
你必須明白的是,聲明'去thread_1()'立即返回,讓所有夠程在一個非常短的時間內創建的,所以所有的睡眠呼叫將幾乎同時返回。 – SirDarius