diff --git a/base/channel/main.go b/base/channel/main.go new file mode 100644 index 0000000..17d14bc --- /dev/null +++ b/base/channel/main.go @@ -0,0 +1,50 @@ +package main + +import ( + "fmt" + "sync" + "time" +) + +// 声明 通道中 元素类型 +var b chan int + +var wg = new(sync.WaitGroup) + +func main() { + fmt.Println(b) + + // 初始化 通道 + // 通道需初始化后才能使用 + // 一个没有缓冲区的通道 + b = make(chan int) + fmt.Println(b) + + // 带缓冲区的通道初始化 + c := make(chan int, 16) + fmt.Println(c) + + wg.Add(1) + // 由另一个 goroutine 负责接收 + go func() { + fmt.Println("goroutine 接收: 等待接收 通道 b 中的值") + // 从通道 b 接收一个值 + t := <-b + fmt.Println(t) + + wg.Done() + }() + + wg.Add(1) + go func() { + time.Sleep(500 * time.Millisecond) + fmt.Println("goroutine 发送: 将 10086 发送到 通道 b 中") + // 将 10086 发送至 通道 b 中 + // 没人接收将会导致死锁 + b <- 10086 + + wg.Done() + }() + + wg.Wait() +} diff --git a/base/goroutine/gomaxprocs/main.go b/base/goroutine/gomaxprocs/main.go index 60dcc9b..0b2b3b1 100644 --- a/base/goroutine/gomaxprocs/main.go +++ b/base/goroutine/gomaxprocs/main.go @@ -32,7 +32,8 @@ func main() { // goroutine 初始栈大小为2k // 设置 最大 线程数 - // 默认为 CPU 线程数 + // 默认为 CPU 逻辑核心数 + fmt.Printf("CPU 逻辑核心数: %d\n", runtime.NumCPU()) // 线程过多会增加 上下文切换负担 runtime.GOMAXPROCS(1) wg.Add(2)