Go语言入门13(runtime包)

打印 上一主题 下一主题

主题 906|帖子 906|积分 2718

Runtime包

GOMAXPROCS()

​        用来设置可以并行计算的CPU核数最大值,并返回之前的值,具体使用方法上一篇有些,这里不再赘述
Gosched()

​        用于让出CPU时间片,让出当前goroutine的执行权限,调度器安排其他等待的任务运行,并在下次某个时候从该位置恢复执行
Goexit()

​        用于立即中止当前goroutine的运行(中止所在协程),而并不影响其他goroutine。⭐注意!Goexit()在中止当前协程前,还是会运行当前goroutine还没有执行的defer语句,切记,不允许在主函数调用Goexit(),会导致panic异常
举个栗子
  1. // 定义两个函数,Test01和Test02
  2. // Test02在Test01运行结束之后运行
  3. // 并且Test02在i = 3的时候结束运行
  4. //Test01
  5. func Test01(wg *sync.WaitGroup) {
  6.         defer func() {
  7.                 fmt.Println("Test01结束!")
  8.                 wg.Done()
  9.         }()
  10.         fmt.Println("协程01循环输出:")
  11.         for i := 0; i < 5; i++ {
  12.                 fmt.Println("协程01 -", i)
  13.         }
  14. }
  15. // Test02
  16. func Test02(wg *sync.WaitGroup) {
  17.         defer func() {
  18.                 fmt.Println("Test02结束!")
  19.                 wg.Done()
  20.         }()
  21.     // 等待Test01运行结束
  22.         runtime.Gosched()
  23.         fmt.Println("协程02循环输出:")
  24.         for i := 0; i < 5; i++ {
  25.                 if i == 3 {
  26.                         fmt.Println("i = 3 退出!")
  27.             // 当i = 3时执行defer里的语句然后退出
  28.                         runtime.Goexit()
  29.                 }
  30.                 fmt.Println("协程02 -", i)
  31.         }
  32. }
  33. // main函数调用
  34. func main() {
  35.         var wg sync.WaitGroup
  36.         wg.Add(2)
  37.         go Test01(&wg)
  38.         go Test02(&wg)
  39.         wg.Wait()
  40.         fmt.Println("This is main function!")
  41. }
  42. /*输出:
  43. 协程01循环输出:
  44. 协程01 - 0
  45. 协程01 - 1
  46. 协程01 - 2
  47. 协程01 - 3
  48. 协程01 - 4
  49. Test01结束!
  50. 协程02循环输出:
  51. 协程02 - 0
  52. 协程02 - 1
  53. 协程02 - 2
  54. i = 3 退出!
  55. Test02结束!
  56. This is main function!
  57. */
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美丽的神话

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表