-2
異なるプロセスで3つのルーチンを実行したい。調査の結果、runtime.GOMAXPROCS()を使用する必要があることがわかりました。しかし、runtime.GOMAXPROCS()を使用しても、すべてのルーチンは同じプロセスで実行されます。どのように私はそれを別のプロセスで実行することができます。以下はコードと出力です。ここでGo lang:異なるプロセスでルーチンを実行する
Number of CPU 8
Process id of main 16874
Process id of 0 go routine 16874
Process id of 2 go routine 16874
Process id of 1 go routine 16874
Process id of 0 go routine 16874
Process id of 1 go routine 16874
Process id of 2 go routine 16874
Process id of 0 go routine 16874
Process id of 1 go routine 16874
Process id of 2 go routine 16874
Process id of 2 go routine 16874
Process id of 0 go routine 16874
Process id of 1 go routine 16874
あなたは私がGOMAXPROCSを使用しているにもかかわらず、同じプロセス上のすべてのルーチンの実行を見ることができます:ここでgoplayground
func main() {
runtime.GOMAXPROCS(4)
fmt.Printf("Number of CPU %d \n",runtime.NumCPU())
fmt.Printf("Process id of main %d \n\n",os.Getpid())
for i:=0 ;i<3; i++{
go printAndSleep(i)
}
time.Sleep(time.Second * 100)
}
func printAndSleep(i int){
for {
fmt.Printf("Process id of %d go routine %d \n",i,os.Getpid())
time.Sleep(time.Second * 2)
}
}
出力へのリンクです。何故ですか?私が間違って使用しています
実行中のゴルーチンは、最大GOMAXPROCS OSスレッド全体で多重化されます。 1つのプロセスしかありません。 – JimB
ありがとう@JimBしかし、GOMAXPROCS(1)とGOMAXPROCS(2)の違いを実行IDや何かのように確認する方法はありますか? – TheLion
Goは、並列性のために設計されています。したがって、Goランタイムは、ルーチンがどのように実行されるかを決定します。それはGoの能力です。つまり、自分で決める理由はありません(Goではなく)。 google "同時性が並列性ではない"場合は、Go並行性設計に関するいくつかの話題があります。 – jnmoal