golang學習筆記——協程

當主協程退出後子協程也會退出
package main
 
import (
"fmt"
"time"
)
 
func main() {
go func() {
     i := 0
     for {
          i++
          fmt.Println("son i = ", i)
          time.Sleep(time.Second)
      }
}()
 
for i := 0; i < 3; i++ {
     fmt.Println("main i = ", i)
     time.Sleep(time.Second)
     if i == 2 {
          break
     }
}
 
}
 
runtime包
  • runtime.Gosched() 讓出當前執行權限
package main
 
import (
    "fmt"
    "runtime"
)
 
func main() {
    //設置爲單核運行
    runtime.GOMAXPROCS(1)
    go func() {
         for i := 0; i < 5; i++ {
                 fmt.Println("task i = ", i)
         }
    }()
 
    for i := 0; i < 2; i++ {
         runtime.Gosched()
         fmt.Println("main i = ", i)
    }
 
}
  • runtime.Goexit() 終止當前協程
package main
 
import (
    "fmt"
    "runtime"
)
 
func test() {
    defer func() {
         fmt.Println("dddddddddddddddd")
    }()
 
 
    // return //終止函數
    runtime.Goexit() //終止當前協程
 
    fmt.Println("ccccccccccccccccccc")
}
 
func main() {
    go func() {
         fmt.Println("aaaaaaaaaaaaaaaa")
 
         test()
 
         fmt.Println("bbbbbbbbbbbbbbb")
    }()
 
    for {
 
    }
}
 
//********輸出***********
aaaaaaaaaaaaaaaa
dddddddddddddddd
  • runtime.GOMAXPROCS() 設置執行指令的cpu核數,返回上一次執行設置的cpu核數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章