Golang 协程与通道

前言

在 Go 语言中,
协程被称为 goroutines。goroutine 是 Go 的并发执行单元,它比传统的线程更轻量级,允许你以非常低的开销启动成千上万个并发任务
通道(channel)是一种特殊的类型,用于在不同的 goroutines 之间进行通信和同步。通道可以被想象成一个传递数据的管道,它可以帮助确保并发程序的数据同步,避免竞态条件

协程

goroutine 在使用上非常简单,只需要在函数调用前加上关键字 go。当 go 关键字用于调用一个函数时,该函数会在一个新的 goroutine 中异步执行

package main

import (
	"fmt"
	"time"
)

// 这是一个将在goroutine中运行的函数
func sayHello() {
   
   
	fmt.Println("Hello, World!")
}

func main() {
   
   
	// 启动一个goroutine
	go sayHello()

	// 主goroutine需要等待一段时间,否则程序可能在 sayHello goroutine运行之前就退出了
	time.Sleep(1 * time.Second)
	fmt.Println("Main function finished")
}

sayHello 函数在一个新的 goroutine 中被调用。主 main 函数在调用 sayHello 后会继续执行,几乎立即执行 time.Sleep 来等待一秒钟,确保有足够的时间让 sayHello goroutine 执行。如果没有 time.Sleep,程序可能会在 sayHello goroutine 还没来得及运行时结束,因为主函数(也是一个 goroutine)结束时会关闭所有的其他 goroutines

注意:在实际程序中,我们通常不会使用 time.Sleep 来等待一个 goroutine 完成,因为这种方法并不可靠。相反,我们通常会使用通道(channels)或其他同步机制,如 WaitGroups,来协调不同 goroutines 之间的执行

通道

通道可以是带缓冲的或不带缓冲的

  • 不带缓冲的通道在发送和接收数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值