最近尝试用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