Go Concurreny

作者: perryn | 来源:发表于2017-02-17 18:05 被阅读29次
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

    本文链接:https://www.haomeiwen.com/subject/efvlwttx.html