迪龙网-迪拜华人房产投资指南

Go 语言的调度器通过使用与 CPU 数量相等的线程减少线程频繁切换的内存开销,同时在每一个线程上执行额外开销更低的 Goroutine 来降低操作系统和硬件的负载。

goroutine的启动

将要并发执行的任务包装成一个函数,调用函数的时候前面加上go关键字,就能够开启一个goroutine去执行该函数的任务,goroutine对应的函数执行完,该goroutine就结束了;

程序启动的时候就会自动创建一个goroutine去执行main函数,main函数结束了,那么程序就结束了,由该程序启动的所有其他goroutine也都结束了。

goroutine的本质

[cc lang='go']
goroutine的调度模型:GMP
m:n把m个goroutine分配给n个操作系统线程
[/cc]

goroutine与操作系统线程(OS线程)的区别

[cc lang='go']
goroutine是用户态的线程,比内核态的线程更轻量级,初始时只占用2KB的栈空间,可以轻松开启数十万的goroutine也不会崩内存。
[/cc]

runtime.GOMAXPROCS

[cc lang="go"]Go1.5之后默认就是操作系统的逻辑核心数,默认跑满cpu。例如:runtime.GOMAXPROCS(1) 表示只占用1核[/cc]

work pool模式

[cc lang='go']
开启一定数量的goroutine去干活
[/cc]

sync.WaitGroup

[cc lang='go']
var wg sync.WaitGroup
[/cc]

  • wg.Add(1):计数器+1
  • wg.Done():计数器-1
  • wg.Wait():等
赞(1) 打赏
标签:

上一篇:没有了,已经是最后文章

下一篇:

相关推荐

0 条评论关于"Go语言并发之goroutine"

表情

最新评论

    暂无留言哦~~

支付宝扫一扫打赏

微信扫一扫打赏