package main
import (
"fmt"
"runtime"
"sync"
)
const (
Step = Step
LoopCount = 2
)
/*
在go中,每个goroutine会在一个cpu的逻辑core上执行操作,如果CPU是单核的,并且是多个goroutine,可能会存在
一个gouroutine的挂起,go会新建一个thread去goroutine执行队列中拿到下一个任务,然后创建thread就行执行。
等之前被挂起的goroutine的thread的任务再次加载到执行队列中进行执行。之前被挂起的goroutine的thread则会保留
等待下次被重用。goroutine的并发比并行要好很多。
Parallelism is about doing a lot of things at once.
Concurrency is about managing a lot of things at once.
*/
func main() {
var wg sync.WaitGroup
runtime.GOMAXPROCS(2)
//注释掉 tumetime.GOMAXPROCS(2),如果是多核CPU(>=2),每个goroutine会在每个核上执行操作,运行结果显示不会有交叉的地方
wg.Add(2)
go func(wg *sync.WaitGroup) {
defer wg.Done()
for i := 0; i < LoopCount; i++ {
for ch := 'a'; ch < 'a'+Step; ch++ {
fmt.Printf("%c ", ch)
}
fmt.Println("\n")
}
}(&wg)
go func(wg *sync.WaitGroup) {
defer wg.Done()
for i := 0; i < LoopCount; i++ {
for ch := 'A'; ch < 'A'+Step; ch++ {
fmt.Printf("%c ", ch)
}
fmt.Println("\n")
}
}(&wg)
wg.Wait()
}
Go Concurreny
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 中国有一句古话说“不积跬步,无以至千里;不积小流,无以成江海。”我相信有很多很多的人一定想要去投资去理财,但是总是...