Chinaunix首页 | 论坛 | 博客
  • 博客访问: 11915
  • 博文数量: 3
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 42
  • 用 户 组: 普通用户
  • 注册时间: 2015-09-15 10:19
文章分类
文章存档

2015年(3)

我的朋友
最近访客

分类: IT业界

2015-09-15 10:36:45

为了看golang多个goroutine上怎么调度,上代码:
`package main`
`import(`
    `"fmt"`
`)`
`func main(){`
 `go func(){//goroutine 持续打印1`
        `i:=1`
        `fmt.Println(i)`
    `}()`
    `for{//main 程持续打印0`
        `i:=0`
        `fmt.Println(i)`
    `}`
  
`}`
实际上在打印一段1之后会一直打印0,也就是没有切回main之外的goroutine。
`package main`
`import(`
    `"fmt"`
      `  "time"`
`)`
`func main(){`
`go func(){//goroutine 持续打印1`
        `i:=1`
        `fmt.Println(i)`
    `}()`
    `for{//main 程持续打印0`
             `  time.Sleep(time.Second*1)//每次阻塞一秒再打印`
        `i:=0`
        `fmt.Println(i)`
    `}`
   
`}`
这里就可以发现别的goroutine在执行了。
实际工作中main程序会一直执行别的程序体,不会特意进行阻塞。这时候就要祭出golang的runtime了。
`package main`
`import(`
    `"fmt"`
    `    "runtime"`
`)`
`func main(){`
       ` runtime.GOMAXPROCS(2)//运行机器是双核`
 `go func(){//goroutine 持续打印1`
        `i:=1`
        `fmt.Println(i)`
    `}()`
    `for{//main 程持续打印0`
        `i:=0`
        `fmt.Println(i)`
    `}`
  
`}`
这里的运行结果就可以看到预计的各个goroutine不停切换的效果了。
上结论:单核上运行多线程时,一直在运行的是main线程,其余线程在首次执行之后只有等待main主动让出时间才能执行。
阅读(1259) | 评论(0) | 转发(0) |
1

上一篇:没有了

下一篇:golang json的大小写技巧

给主人留下些什么吧!~~