欢迎,来自IP地址为:3.239.97.34 的朋友


Go语言的一个重要特性是其协程方式的并发程序设计,以及采用通道作为协程间通信的手段。以下是一个经典的Go语言并发程序示例,很说明问题的展示了Go程序协程以及通道来设计程序的方式。

程序的主要功能是不断的打印素数,具体代码如下:

package main

import (
	"fmt"
)

func generate(ch chan int)  {
	for i:=2;;i++{
		ch <-i
	}
}

func filter(in,out chan int,prime int)  {
	for {
		i:=<-in
		if i%prime !=0{
			out <-i
		}
	}
}

func main() {
	ch :=make(chan int)
	go generate(ch)

	for{
		prime :=<-ch
		fmt.Print(prime,"  ")
		chNew := make(chan int)
		go filter(ch,chNew,prime)
		ch=chNew
	}
}

协程filter(in,out chan int,prime int)会拷贝整数到通道,丢弃掉可以被prime整除的数字,然后每个prime又开启了一个新的协程,生成器generate和选择器filter并发请求。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注