Go lang:在不同的过程中运行例程

时间:2016-10-31 01:42:26

标签: go

我想在不同的过程中运行3 go例程。经过研究,我发现我需要使用runtime.GOMAXPROCS()。但即使在使用runtime.GOMAXPROCS()之后,所有例程都在相同的进程上运行。如何让它在不同的进程上运行。下面是代码和输出。以下是goplayground

的链接
import ast

with open('file.txt') as f:
    values = ast.literal_eval(f.read())
    X, Y = zip(*values)

输出:

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,您也可以在同一个进程中看到所有例程运行。这是为什么?我用错了吗

1 个答案:

答案 0 :(得分:-1)

如果您只想在每个进程上运行一个goroutine,则可以使用runtime.LockOSThread()在该进程上运行的进程和goroutines之间建立1:1的关系。在您的情况下,每次启动新的goroutine时都应该调用runtime.LockOSThread。

for i:=0 ;i<3; i++{
    go func(){
        runtime.LockOSThread()
        printAndSleep(i)
    }()
}