golang 使用无缓冲channel 多个goroutine,打印 1000 以内所有素数
看到一个代码片段:
package main
import (
"fmt"
)
func main() {
origin,wait := make(chan int),make(chan struct{})
Processor(origin,wait)
for i:=2;i<10 ;i++ {
origin <- i
}
close(origin)
<-wait
}
func Processor(seq chan int,wait chan struct{}) {
go func() {
prime,ok := <- seq
// 结束
if !ok{
close(wait)
return
}
fmt.Println(prime)
out := make(chan int)
Processor(out,wait)
for num := range seq{
if num % prime!=0{
out<- num
}
}
close(out)
}()
}
补充说明:
要找出10000以内所有的素数,这里使用的方法是筛法,即从2开始每找到一个素数就标记所有能被该素数整除的所有数。直到没有可标记的数,剩下的就都是素数。
改为找出10以内的所有素数,怎么理解这段代码——具体是怎么跑的?一个个就把值筛出来了
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这个代码还是很好理解的,给你加个注释: