主题
文章
项目
资源
图书
Go网址导航
下载
官方文档
英文文档
中文文档
标准库中文版
Go指南
注册
登录
首页
文章
golang 里goroutine产生的线程数量
kjfcpua
·
import "os"
func main() {
for i:=0; i<20; i++ {
go func() {
for {
b:=make([]byte, 10)
os.Stdin.Read(b) // will block
}
}()
}
select{}
}
会产生21个线程:
runtime scheduler(src/pkg/runtime/proc.c)会维护一个线程池,当某个goroutine被block后,scheduler会创建一个新线程给其他ready的goroutine
GOMAXPROCS控制的是未被阻塞的所有goroutine被multiplex到多少个线程上运行
本文来自:
CSDN博客
感谢作者:kjfcpua
查看原文:
golang 里goroutine产生的线程数量
阅读全文
查看全部 2 个评论
xmge
欲戴王冠 必承其重
测试的时候还是 8 个啊。 ```go package main import ( "fmt" "log" "net/http" _ "net/http/pprof" "os" ) func Init() { c := make(chan int) for i:=0;i<1000;i++{ go func(i int) { fmt.Println(i) c <- i }(i) } } func init() { go func() { for i:=0; i<20; i++ { go func() { for { b:=make([]byte, 10) os.Stdin.Read(b) // will block } }() } select{} }() } func main() { http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) { writer.Write([]byte("hello world")) }) log.Fatal(http.ListenAndServe(":8000",nil)) } ```
评论于 2020-04-30 08:36:19
#1
更多评论
xmge
欲戴王冠 必承其重
协程吧。不是线程
评论于 2020-04-30 13:31:42
#2
我要评论
用户登录
记住登录状态
没有账号?
注册
忘记密码?
或
GitHub 登录
Gitea 登录
Go今日面试题
今日阅读排行
一周阅读排行
import "os"
func main() {
for i:=0; i<20; i++ {
go func() {
for {
b:=make([]byte, 10)
os.Stdin.Read(b) // will block
}
}()
}
select{}
}
会产生21个线程:
runtime scheduler(src/pkg/runtime/proc.c)会维护一个线程池,当某个goroutine被block后,scheduler会创建一个新线程给其他ready的goroutine
GOMAXPROCS控制的是未被阻塞的所有goroutine被multiplex到多少个线程上运行
X
登录和大家一起探讨吧
用户名
密码
记住登录状态
登录
GitHub 登录
忘记密码?
还不是会员
现在注册