Go Concurreny

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()  
}  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容