go 语言 goroutine通信

示例demo52
package main

import (
  "fmt"
)
//taskChan <-chan 只读
//resChan chan<- 只写
//exitChan chan<- 只写
func calc(taskChan chan int, resChan chan int, exitChan chan bool) {
  for v := range taskChan {
    flag := true
    for i := 2; i < v; i++ {
      if v%i == 0 {
        flag = false
        break
      }
    }
    if flag {  
      //值放到resChan 通道里
      resChan <- v
    }
  }
    fmt.Println("exit")
    exitChan <- true
  }

func main() {
  intChan := make(chan int, 1000) //初始化 intchan 通道 长度1000
  resultChan := make(chan int, 1000) //初始化 resultChan通道 长度1000
  closeChan := make(chan bool, 8)
  go func() { //协程方式放进10000个数到intChan通道里
    for i := 0; i < 100000; i++ {
      intChan <- i
    }
    close(intChan) //关闭intChan通道
  }()

  //启8个协程 运行计算 传入intChan 和resultChan
  for i := 0; i < 8; i++ {
    go calc(intChan, resultChan, closeChan)
  }

  //等待所有计算的goroutine全部退出
  go func() {
    for i := 0; i < 8; i++ {
      <-closeChan
    }
    close(closeChan) //关闭closeChan通道
    close(resultChan) //关闭resultChan通道
  }()

  //循环 resultChan遍历数据
  for v := range resultChan {
    fmt.Println(v)
  }

}
posted @   5656923  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示