golang goroutine协程的并发实例

文章发布于 2023-08-31

使用Go编程语言时,可以轻松地创建和管理协程goroutines来实现并发。下面是一个简单的Go协程并发实例,其中创建了两个协程来同时执行不同的任务:

package main
import (
    "fmt"
    "time"
)
func task1() {
    for i := 1; i <= 5; i++ {
        fmt.Println("Task 1 - Iteration", i)
        time.Sleep(time.Millisecond * 500)
    }
}
func task2() {
    for i := 1; i <= 5; i++ {
        fmt.Println("Task 2 - Iteration", i)
        time.Sleep(time.Millisecond * 700)
    }
}
func main() {
    fmt.Println("Main - Start")
    // 启动协程执行task1
    go task1()
    // 启动协程执行task2
    go task2()
    // 等待一段时间,以便协程有足够的时间执行
    time.Sleep(time.Second * 5)
    fmt.Println("Main - End")
}

在这个例子中,我们定义了两个函数 task1task2,它们分别代表两个不同的任务。在 main 函数中,我们使用 go 关键字并调用这两个函数,将它们封装成协程。这样一来,task1task2 将会并发地执行。

为了确保 main 函数不会在协程执行完成之前退出,我们使用 time.Sleep 函数来暂停 main 函数的执行。在实际应用中,你可能会使用更稳健的方式来等待协程的完成,比如使用通道(channels)或者 sync.WaitGroup 等。

需要注意的是,协程的执行顺序和时间可能会因为调度器的行为而有所不同,因此每次运行结果可能会有所不同。