协程代码不解

package main

import "fmt"

func main() {
    origin, wait := make(chan int, 0), make(chan struct{}, 0)
    Processor(origin, wait)
    for num := 2; num < 1000; num++ {
        origin <- num
    }
    close(origin)
    <-wait
    fmt.Println("end.")
}

func Processor(seq chan int, wait chan struct{}) {
    go func() {
        prime, ok := <-seq
        if !ok {
            close(wait)
        }
        /*prime := <-seq
        defer close(wait)*/
        fmt.Println(prime)
        out := make(chan int)
        Processor(out, wait) // 此处为什么要在递归调用一次呢
        for num := range seq {
            if num%prime != 0 {
                out <- num
            }
        }
        close(out)
    }()
}

对于以上代码是看文章 https://36kr.com/p/5073181.html 中的代码 代码中,为什么还要再一次调用Processor 一次呢

已邀请:

lwhile

赞同来自: fangniu

原文里面有个图:

Go质素并发计算

每一次Processor函数的递归调用,就是将过滤的层树往下再推进一层

小火箭 - 90后IT男

赞同来自:

跟着文章的这个图理解:

要回复问题请先登录注册