从80000个数中取出素数,从结果中可以看出不使用协程用的时间是使用协程用时的20倍!!!
package main
import (
"fmt"
"time"
)
func getNums(getNum chan int) {
for i := 2; i < 80000; i++ {
getNum <- i
}
close(getNum)
}
func prineNums(getNum chan int, primeNum chan int, exitStat chan bool) {
for {
v, ok := <-getNum
if !ok {
break
}
flag := true
for i := 2; i < v; i++ {
if v%i == 0 {
flag = false
break
}
}
if flag {
primeNum <- v
}
}
fmt.Println("这里有一个协程取数完毕~~")
exitStat <- true
}
func main() {
getNum := make(chan int, 1000)
primeNum := make(chan int, 80000)
exitStat := make(chan bool, 4)
starttime := time.Now().Unix()
go getNums(getNum)
for i := 0; i < 4; i++ {
go prineNums(getNum, primeNum, exitStat)
}
go func() {
for i := 0; i < 4; i++ {
<-exitStat
}
endtime := time.Now().Unix()
fmt.Println("使用协程耗费时间=", endtime-starttime, "秒")
close(primeNum)
}()
for {
_, ok := <-primeNum
if !ok {
break
}
}
fmt.Println("主线程执行完毕~~")
starttime2 := time.Now().Unix()
for i := 2; i < 80000; i++ {
flag2 := true
for j := 2; j < i; j++ {
if i%j == 0 {
flag2 = false
}
if flag2 {
}
}
}
endtime2 := time.Now().Unix()
fmt.Println("不使用协程的运行时间为=", endtime2-starttime2, "秒")
}
运行结果为
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/030a737507b03f75df97b0d79a66d9a8.png)