mirror of
https://gitee.com/shikong-sk/golang-study
synced 2025-02-23 15:32: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