(四十四)golang--协程(goroutine)和管道(channel)相结合实例

(四十四)golang--协程(goroutine)和管道(channel)相结合实例,第1张

概述统计1-8000之间的素数。 整体框架: 说明:有五个协程,三个管道。其中一个协程用于写入数字到intChan管道中,另外四个用于取出intChan管道中的数字并判断是否是素数,然后将素数写入到pri

统计1-8000之间的素数。

整体框架:

 

说明:有五个协程,三个管道。其中一个协程用于写入数字到intChan管道中,另外四个用于取出intChan管道中的数字并判断是否是素数,然后将素数写入到primeChan管道中,最后如果后面四个协程哪一个工作完了,就写入一个true到exit管道中,最后利用循环判断这四个协程是否都完成任务,并退出。

main.go

package mainimport (    "fmt"    go_code/project_13/testtime")func putNum(intChan chan int) {    for i := 1; i <= 80000; i++ {        intChan <- i    }    close(intChan)}func isPrime(n int) bool {    //这里本来i只需要到int(math.Sqrt(float64(n))),为了计算时间,就直接设置i-n了    2; i <= n; i++ {        if n%i == 0 {            return false        }    }    true}func primeNum(intChan chan int,primeChan chan for time.Sleep(time.Millisecond * 10)        num,ok := <-intChan        if !ok {            break        }        isp := isPrime(num)        isp {            continue        } else {            primeChan <- num        }    }    fmt.Println(有一个协程取不到数据而退出了)    exitChan <- }func main() {    intChan := make(chan 1000)    primeChan := make(chan 20000)    exitChan := make(chan bool,1)">4)    记录当前时间    start := time.Now()    开启一个协程    go putNum(intChan)    开启四个协程    0; i < 4; i++ {        go primeNum(intChan,primeChan,exitChan)    }    当四个协程都完成任务后,计算消耗时间,并关闭primeChan管道    go func() {         {            <-exitChan        }        cost := time.Since(start)        fmt.Printf(使用协程耗费时间:%s\n,cost)        close(primeChan)    }()     res,ok := <-primeChan        _,1)">primeChan                }        在这里计算已经完成了,为了计算时间,注释掉了打印的 *** 作         fmt.Printf("素数=%d\n",res)    }    fmt.Println(主线程退出)    test.test()}

test.go

package testimport (    )func isPrime(n }func test() {    start :=1; i <  {        isPrime(i)    }    cost := time.Since(start)    fmt.Printf(传统方法消耗时间为:%s

使用协程的方法的确是要比使用传统的方法要快的,有其是在数据量进一步的增大时。至此,一个管道和协程的实例就算完成了, 

总结

以上是内存溢出为你收集整理的(四十四)golang--协程(goroutine)和管道(channel)相结合实例全部内容,希望文章能够帮你解决(四十四)golang--协程(goroutine)和管道(channel)相结合实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1262162.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存