doucan8246326 2016-10-31 01:42
浏览 47

Go lang:在不同进程上运行例程

I want to run a 3 go routine on different process. Upon research I found that I need to use runtime.GOMAXPROCS(). But even after using runtime.GOMAXPROCS(), all routine runs on same process. How can I make it run on different process. Below is the code and output. Here is the link to goplayground

func main() {

    runtime.GOMAXPROCS(4)

    fmt.Printf("Number of CPU %d 
",runtime.NumCPU())

    fmt.Printf("Process id of main %d 

",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 
",i,os.Getpid())
        time.Sleep(time.Second * 2)
    }   
}

Output :

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 

Here you can see all the routine runs on same process even though I have used GOMAXPROCS . Why is that? Am I using it wrong

  • 写回答

1条回答 默认 最新

  • dqpkea9486 2016-10-31 02:14
    关注

    If you want only one goroutine running on each process, you can use runtime.LockOSThread() to make a 1:1 relation between process and goroutines running on that process. In your case, you should invoke runtime.LockOSThread every time you launch a new goroutine.

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

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题