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
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 中国有一句古话说“不积跬步,无以至千里;不积小流,无以成江海。”我相信有很多很多的人一定想要去投资去理财,但是总是...