15个协程

package main

import (
    "fmt"
)

func inputNum(inChan chan int, n int) {
    for i := 1; i <= n; i++ {
        inChan <- i
    }
    fmt.Println("inChan 写入完成")
    close(inChan)
}

func countNum(inChan chan int, primeChan chan int, exitChan chan bool) {
    for {
        //time.Sleep(time.Millisecond * 10)
        num, ok := <-inChan
        if !ok {
            break
        }
        flag := true
        for i := 2; i < num; i++ {
            if num%i == 0 {
                flag = false
                break
            }
        }
        if flag {
            primeChan <- num
        }
    }
    fmt.Println("有一个countNum被关闭了")
    exitChan <- true
}

func main() {

    inChan := make(chan int, 1000)
    primeChan := make(chan int, 1000)
    exitChan := make(chan bool, 15)

    go inputNum(inChan, 80000)

    for i := 0; i < 15; i++ {
        go countNum(inChan, primeChan, exitChan)
    }

    go func() {
        for i := 0; i < 4; i++ {
            <-exitChan
        }
        close(primeChan)
    }()

    for {
        v, ok := <-primeChan
        if !ok {
            break
        }
        fmt.Println(v)
    }
}