26 并发编程之Goroutine的创建与使用

在上一篇教程中,我们探讨了结构体与接口的内容,重点理解了方法和接口的基本概念。接下来,我们将进入并发编程的领域,特别是 Goroutine 的创建与使用。Goroutine 是 Go 语言的核心特性之一,使得并发编程变得简单和高效。

什么是 Goroutine?

Goroutine 是由 Go 语言运行时管理的轻量级线程。使用 Goroutine 可以让我们轻松地执行并发任务。通过使用关键字 go,可以在新的 Goroutine 中运行一个函数。

创建 Goroutine

在 Go 语言中,我们可以通过以下方式创建一个 Goroutine:

1
go functionName(parameters)

这里的 functionName 是我们想要并发执行的函数的名称,parameters 是我们传递给这个函数的参数。

示例:基本的 Goroutine 使用

以下是一个简单的例子,展示如何创建和使用 Goroutine:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main

import (
"fmt"
"time"
)

func sayHello() {
fmt.Println("Hello from Goroutine!")
}

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

// 等待 Goroutine 完成
time.Sleep(1 * time.Second)

fmt.Println("Hello from main!")
}

在这个示例中,我们定义了一个 sayHello 函数,并使用 go sayHello() 启动了一个新的 Goroutine。由于 main 函数会立即继续执行,我们使用 time.Sleep 暂停主程序的执行,以确保 Goroutine 有机会打印输出。

多个 Goroutine

我们可以同时启动多个 Goroutine。下面的例子演示了如何启动多个 Goroutine:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main

import (
"fmt"
"time"
)

func sayHello(id int) {
fmt.Printf("Goroutine %d: Hello!\n", id)
}

func main() {
for i := 1; i <= 5; i++ {
go sayHello(i) // 启动多个 Goroutine
}

// 等待 Goroutines 完成
time.Sleep(2 * time.Second)
fmt.Println("All Goroutines finished execution.")
}

在这个例子中,我们通过循环创建并启动了 5 个 Goroutine,每个 Goroutine 都会打印出自己的 ID。

Goroutine 的特点

  1. 轻量级: Goroutine 的创建和销毁的开销非常小。此特性允许我们在一个程序中同时运行成千上万的 Goroutine。
  2. 并发执行: Go 运行时会自动进行 Goroutine 的调度,允许在不同的 Goroutine 之间切换执行。
  3. 简洁易用: 使用关键字 go 就可以将函数放入 Goroutine 中运行,语法简单。

注意事项

虽然 Goroutine 的创建非常简单,但我们仍然需要注意以下几点:

  • 共享数据的竞态条件: 多个 Goroutine 同时访问共享数据时,要确保数据的一致性,避免出现竞态条件。我们将在下一篇教程中讨论 Channel 的使用,它可以帮助我们安全地在 Goroutine 之间共享数据。

  • 无法控制的 Goroutine: 如果主程序结束,所有的 Goroutine 无论是否完成都会被强制终止。因此,适当地管理 Goroutine 的生命周期是必要的。

总结

在本篇教程中,我们学习了如何创建和使用 Goroutine,这使得 Go 语言的并发编程非常容易。然而,管理并发程序的复杂性,尤其是在共享数据时,我们将继续探讨在下一篇教程中介绍的 Channel。希望你能继续跟随我们的学习旅程!

26 并发编程之Goroutine的创建与使用

https://zglg.work/go-zero/26/

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-11

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论