go语音进阶 多任务
warning:
这篇文章距离上次修改已过188天,其中的内容可能已经有所变动。
在Go语言中,多任务可以通过并发或并行的方式来实现。并发指的是在一个处理器上"同时"处理多个任务,而并行则是多个处理器或者核同时处理多个任务。Go语言支持并发,通过goroutine和channel来实现。
goroutine是Go语言中并发的核心,它允许我们将一个函数执行并发的操作。通过在函数调用前添加关键字go
,我们可以创建一个goroutine。
channel是Go语言中的一个类型,它可以用来在多个goroutine之间同步发送和接收值。
下面是一个简单的例子,展示了如何创建goroutine和使用channel来同步两个goroutine之间的数据传递:
package main
import (
"fmt"
"time"
)
func printNumbers(numbers chan int) {
for i := 0; i < 5; i++ {
numbers <- i
}
close(numbers) // 通知channel接收者没有更多的数据了
}
func printFromChannel(numbers chan int) {
for {
num, ok := <-numbers // 从channel接收数据,ok为false表示channel已经关闭
if !ok {
break // 如果channel已经关闭,就退出循环
}
fmt.Println(num)
}
}
func main() {
numbers := make(chan int) // 创建一个channel
go printNumbers(numbers) // 创建一个goroutine去发送数据到channel
go printFromChannel(numbers) // 创建一个goroutine去从channel接收数据并打印
time.Sleep(1 * time.Second) // 等待goroutine执行完成
}
在这个例子中,我们创建了两个goroutine,第一个goroutine发送数字到channel,第二个goroutine从channel接收数字并打印。我们使用make(chan int)
创建了一个int类型的channel,使用numbers <- i
发送数据到channel,使用<-numbers
从channel接收数据。最后,我们使用time.Sleep
来等待两个goroutine执行完成。
注意,在实际应用中,通常不会使用time.Sleep
来等待goroutine执行完成,这里只是为了保证主goroutine等待其他goroutine执行完成。在真实场景中,通常会使用更合适的同步机制,比如wait group或者通过channel发送一个特殊的值来通知执行完成。
评论已关闭