diff --git a/base/goroutine/gomaxprocs/main.go b/base/goroutine/gomaxprocs/main.go new file mode 100644 index 0000000..60dcc9b --- /dev/null +++ b/base/goroutine/gomaxprocs/main.go @@ -0,0 +1,42 @@ +package main + +import ( + "fmt" + "runtime" + "sync" +) + +var wg = new(sync.WaitGroup) + +func a() { + defer func() { + wg.Done() + }() + + for i := 0; i < 10; i++ { + fmt.Printf("A: %d\n", i) + } +} + +func b() { + defer func() { + wg.Done() + }() + + for i := 0; i < 10; i++ { + fmt.Printf("B: %d\n", i) + } +} + +func main() { + // goroutine 初始栈大小为2k + + // 设置 最大 线程数 + // 默认为 CPU 线程数 + // 线程过多会增加 上下文切换负担 + runtime.GOMAXPROCS(1) + wg.Add(2) + go a() + go b() + wg.Wait() +} diff --git a/base/goroutine/main.go b/base/goroutine/main.go new file mode 100644 index 0000000..0398b3a --- /dev/null +++ b/base/goroutine/main.go @@ -0,0 +1,21 @@ +package main + +import ( + "fmt" + "time" +) + +func hello(i int) { + fmt.Println("hello:", i) +} + +func main() { + for i := 0; i < 100; i++ { + // 开启一个单独的 goroutine 任务 + go hello(i) + } + + fmt.Println("main") + time.Sleep(1 * time.Millisecond) + // main 函数结束时 由 main 函数 启动的 goroutine 任务也随之结束 +} diff --git a/base/goroutine/sync/main.go b/base/goroutine/sync/main.go new file mode 100644 index 0000000..0bf0f49 --- /dev/null +++ b/base/goroutine/sync/main.go @@ -0,0 +1,25 @@ +package main + +import ( + "fmt" + "sync" +) + +var wg = new(sync.WaitGroup) + +func hello(i int) { + defer wg.Done() + fmt.Println("hello:", i) +} + +func main() { + for i := 0; i < 100; i++ { + // 开启一个单独的 goroutine 任务 + wg.Add(1) + go hello(i) + } + + fmt.Println("main") + // 等待所有线程结束 + wg.Wait() +}