goroutinue(协程) + GOMAXPROCS

    G —— goroutinue对象,经go语句创建

    M —— 系统线程,和P关联后运行G,上限10000,M指的是Machine,一个M直接关联了一个内核线程。由操作系统管理

    P —— 调度器,和M关联后运行G,数量由 runtime.MAXGOPROCS 设置,默认为CPU核数,上限256

    此外还有一个系统调度器(runtime.sched),负责维护一些全局队列。

 

i := runtime.GOMAXPROCS(0)  //返回获取当前cpu核心(内核个数 * 超线程)

go1.5 (released 2015/08/19) 之后,默认就设置了GOMAXPROCS 为最大 cores 数量,无需设置

https://www.jb51.cc/go/187083.html

package main
import(
	"fmt"
	"runtime"
) 
func main()  {
	i := runtime.GOMAXPROCS(2)	//返回获取当前cpu核心个数,哪怕你设置了2
    //可以在任务管理器中看到本进程cpu占用达到200%
	fmt.Println(i)
    go task()
    go task()
    go task()
	go task()
	go task() 
    select{} 
} 
func task(){ 
    for {   
 
    } 
}

批量创建goroutinue传参需要注意的:


for i := 0; i < 10; i++{
    //i作为参数传给goroutinue,否则goroutine接受的参数,可能不是期望的
    //因为创建goroutinue的时候,可能被中断,i的值,已经改变了
    go func(value int){

        fmt.Printf("recv %d \n", value)

    }(i)

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值