最近尝试用Go写程序。写了一个tcp网络服务,跑起来之后会把所有的CPU都跑到了100%,略吓人。
经过简单分析发现了问题所在
package main
import (
"runtime"
"time"
)
func main() {
quit := make(chan bool)
for i := 0; i != runtime.NumCPU(); i++ {
go func() {
for {
select {
case <-quit:
break
default:
}
}
}()
}
time.Sleep(time.Second * 15)
for i := 0; i != runtime.NumCPU(); i++ {
quit <- true
}
}
select
selectcasecaseselectquitselectcasequitcasedefaultselectquitgoroutine
defaultselectquitgoroutine
selectdefault
ch := make (chan int, 1)
ch <- 1
select {
case ch <- 2:
default:
fmt.Println("channel is full !")
}
chchchcaseselectdefaultchannel