Go goroutine和channel结合使用案例

goroutine和channel结合使用案例

应用案例

  • 请完成goroutine和channel协同工作的案例,具体要求:
    • 1)开启一个writeData协程,向管道intChan中写入50个整数.
    • 2)开启一个readData协程,从管道intChan中读取writeData写入的数据。
    • 3)注意:writeData和readDate操作的是同一个管道
    • 4)主线程需要等待writeData和readDate协程都完成工作才能退出
  • 示意图:

  • 代码实现:
package main
import (
	"fmt"
)


//write Data
func writeData(intChan chan int) {
	for i := 1; i <= 50; i++ {
		//放入数据
		intChan<- i //
		fmt.Println("writeData ", i)
	}
	close(intChan) //关闭
}

//read data
func readData(intChan chan int, exitChan chan bool) {

	for {
		v, ok := <-intChan
		if !ok {
			break
		}
		fmt.Printf("readData 读到数据=%v\n", v) 
	}
	//readData 读取完数据后,即任务完成
	exitChan<- true
	close(exitChan)

}

func main() {

	//创建两个管道
	intChan := make(chan int, 10)
	exitChan := make(chan bool, 1)
	
	go writeData(intChan)
	go readData(intChan, exitChan)

	for {
		_, ok := <-exitChan
		if !ok {
			break
		}
	}
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
channelGo 语言中的一个核心特性,它允许不同的 goroutine 之间进行通信和同步。以下是 channel 的一些使用案例: 1. 并发任务的协调 在一个并发任务中,可能需要多个 goroutine 协同工作,彼此之间需要进行数据传递和同步。这时可以使用 channel 来协调不同的 goroutine,确保它们按照正确的顺序执行。例如,可以使用一个 channel 来传递任务和结果,让不同的 goroutine 同时处理任务,最后把结果传回主 goroutine 进行处理。 2. 生产者-消费者模型 在生产者-消费者模型中,一个或多个生产者会生成数据,而一个或多个消费者会消费这些数据。这时可以使用 channel 作为一个缓冲区来存储数据,让生产者将数据写入 channel,让消费者从 channel 中读取数据。这种方式可以避免生产者和消费者之间的竞争条件,确保每个数据都能被正确地处理。 3. 信号量 在某些场景下,需要限制并发的数量,以避免资源的过度消耗。这时可以使用 channel 作为一个信号量,限制同时执行的 goroutine 数量。例如,可以创建一个有缓冲的 channel,容量为 N,然后在每个 goroutine 开始执行前从 channel 中读取一个元素,在执行完成后再将元素写回 channel。这样可以保证同时执行的 goroutine 数量不超过 N。 4. 事件驱动编程 在事件驱动编程中,需要监听一些事件,当事件发生时执行相应的操作。这时可以使用 channel 来实现事件的监听和触发。例如,可以创建一个 channel,然后将它传递给一个事件监听器。当事件发生时,监听器就可以向 channel 中写入一个值,通知主 goroutine 执行相应的操作。 总之,channelGo 语言中非常强大的一种并发编程工具,可以在各种场景下使用,提高程序的并发性能和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值