mirror of
https://gitee.com/shikong-sk/golang-study
synced 2025-02-22 23:12:15 +08:00
docs: goroutine
This commit is contained in:
parent
1419b92bc7
commit
6d9888b047
42
base/goroutine/gomaxprocs/main.go
Normal file
42
base/goroutine/gomaxprocs/main.go
Normal file
@ -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()
|
||||
}
|
21
base/goroutine/main.go
Normal file
21
base/goroutine/main.go
Normal file
@ -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 任务也随之结束
|
||||
}
|
25
base/goroutine/sync/main.go
Normal file
25
base/goroutine/sync/main.go
Normal file
@ -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()
|
||||
}
|
Loading…
Reference in New Issue
Block a user