第三节 多协程收集结果2

一、单协程和多协程执行的耗时区别
单协程解释:只使用一个main的主协程序来顺序执行,此时查看耗时情况
多协程解释:使用至少2个或者2个以上goroutine来执行程序,此时查看耗时情况
如何实现优雅的关闭channel?看代码

单协程解释

package main

import (
    "fmt"
    "os"
    "time"
)

func task(value int) int {
    time.Sleep(time.Millisecond * 500)
    return value
}
func main() {
    start := time.Now()
    for i := 0; i < 5; i++ {
        res := task(i)
        fmt.Println(res)
    }
    end := time.Since(start)
    fmt.Println("耗时为:", end)
    os.Exit(0)
}

多协程解释

package main

import (
    "fmt"
    "os"
    "sync"
    "time"
)

func task(value int) int {
    time.Sleep(time.Millisecond * 500)
    return value
}
func main() {
    wg := sync.WaitGroup{}
    ch := make(chan int)
    start := time.Now()
    for i := 0; i < 5; i++ {
        wg.Add(1)
        go func(inputParam int) {
            defer wg.Done()
            ch <- task(inputParam)
        }(i)
    }
    go func() {
        defer close(ch)
        wg.Wait()
    }()
    for v := range ch {
        fmt.Println("收集到的结果为:", v)
    }
    //wg.Wait() // 这里不要了
    end := time.Since(start)
    fmt.Println("耗时为:", end)
    os.Exit(0)
}
作者:admin  创建时间:2022-07-09 13:09
最后编辑:海马  更新时间:2024-05-10 15:32