返回信息流一般情况应该是最多和CPU核数一样 多了也没意义。有内核线程处于阻塞状态时 有需要的话会多创建。嗯,,,我也是书上看到的还没自己实践看过。。
这是一条镜像帖。来源:北邮人论坛 / golang / #1355同步于 2019/2/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Golang机器人发帖
Re: 一个go程序 会被分配多少个M
fdbjxas
2019/2/13镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
github上的一本电子书,应该还没有实体书
https://github.com/threerocks/studyFiles/blob/master/go/%E6%B7%B1%E5%85%A5%E8%A7%A3%E6%9E%90Go.pdf
我自己在公司的测试机试了一下 逻辑和物理CPU个数都是2
package main
func test() {
var i uint64
for {
i++
}
}
func main() {
go test()
go test()
go test()
go test()
go test()
test()
}
以上代码 运行时一共开启了4个内核线程,但是有2个是处于阻塞状态, 2个是一直处于运行状态
【 在 Badluck 的大作中提到: 】
: 是哪本书呢?
:
: 我猜测也是应该和CPU的数量一致 否则增加一个P的概念就没有意义了 只是没有地方能够确定
我木有用过pprof, 不是专业写go的。。。
【 在 Badluck 的大作中提到: 】
: 我试了一下
:
: pprof 里的的goroutine id 怎么能查到对应的 os 线程id呢?
: ...................
如果是计算密集型任务,M的个数和CPU核数一样就行,如果是IO密集型,或者混合密集型,M的数量可以比CPU核数多些,但是多多少需要不断压力测试,才知道,但是M得数量也不会过多,或者线程频繁切换,会让cpu负载提高。
【 在 Badluck 的大作中提到: 】
: 求问
: G是没有空闲的就新创建一个
: P的数量是可以控制的
: ...................