分享
  1. 首页
  2. 文章

goroutine/Gosched/Goexit/GOMAXPROCS

ck_god · · 1208 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

goroutine

// code_037_concurrency_goroutine project main.go
package main
import (
 "fmt"
 "time"
)
//并发,concurrency; 并行,parallel;而Go从语言层面就支持了并行,而Go语言提供了自动垃圾回收机制。
//goroutine说到底其实就是协程,执行goroutine只需极少的栈内存(大概是4~5KB),当然会根据相应的数据伸缩
func newTask() {
 i := 0
 for {
 i++
 fmt.Printf("new gorotine: i= %d\n", i)
 time.Sleep(1 * time.Second)
 if i == 10 {
 break
 }
 }
}
func main() {
 go newTask()
 //goroutine>>> 主goroutine退出后,其它的工作goroutine也会自动退出
 i := 0
 for {
 i++
 fmt.Printf("main goroutine : i =%d\n", i)
 time.Sleep(1 * time.Second)
 if i == 10 {
 break
 }
 }
}

Goexit >>>

// code_039_goroutine_runtime_Goexit project main.go
package main
import (
 "fmt"
 "runtime"
)
//备注:调用 runtime.Goexit() 将立即终止当前 goroutine 执行,调度器确保所有已注册 defer延迟调用被执行。
func main() {
 go func() {
 defer fmt.Println("A.defer")
 func() {
 defer fmt.Println("B.defer")
 runtime.Goexit() // 终止当前 goroutine, import "runtime"
 fmt.Println("B") //不会执行
 }()
 fmt.Println("A") //不会执行
 }()
 //死循环,目的不让主goroutine结束
 for {
 }
}

Gosched >>>

// code_038_goroutine_runtime project main.go
package main
import (
 "fmt"
 "runtime"
)
func main() {
 //runtime包:Gosched()、Goexit()、GOMAXPROCS()
 //runtime.Gosched() 用于让出CPU时间片,让出当前goroutine的执行权限,调度器安排其他等待的任务运行,并在下次某个时候从该位置恢复执行。
 //调用 runtime.Goexit() 将立即终止当前 goroutine 执行,调度器确保所有已注册 defer延迟调用被执行。
 //调用 runtime.GOMAXPROCS() 用来设置可以并行计算的CPU核数的最大值,并返回之前的值。
 go func(s string) {
 for i := 0; i < 5; i++ {
 fmt.Println(s)
 }
 }("world")
 for i := 0; i < 5; i++ {
 runtime.Gosched()
 fmt.Println("Hello")
 }
}

GOMAXPROCS >>>

// code_040_goroutine_runtime_GOMAXPROCS project main.go
package main
import (
 "fmt"
 "runtime"
)
//调用 runtime.GOMAXPROCS() 用来设置可以并行计算的CPU核数的最大值,并返回之前的值。
func main() {
 n := runtime.GOMAXPROCS(1)
 // n := runtime.GOMAXPROCS(2)
 fmt.Printf("n=%d\n", n)
 for {
 go fmt.Print(0)
 fmt.Print(1)
 }
}

有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:ck_god

查看原文:goroutine/Gosched/Goexit/GOMAXPROCS

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1208 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏