Goroutine 是 Go 编程语言中的一个重要概念。它是 Go 语言实现并发的基础,可以简单地理解为 Go 语言中的轻量级线程。
具体来说,Goroutine 有以下特点:
1.轻量级:
Goroutine 的创建和切换都非常快速,只需要几微秒。这与操作系统级别的线程相比要快得多。
2.并发性:
Goroutine 可以并发执行,意味着可以同时执行多个 Goroutine。Go 运行时会自动管理 Goroutine 的调度和执行。
3.独立性:
每个 Goroutine 都有自己的栈空间、程序计数器和其他必要的运行时数据结构。Goroutine 之间是相互独立的。
4.易用性:
创建 Goroutine 非常简单,只需要使用 go
关键字就可以了。
package mainimport ("fmt""sync""time"
)func main() {// 示例 1:并发性fmt.Println("示例 1: 并发性")var wg sync.WaitGroupwg.Add(2)// 启动两个 Goroutine 并发执行go func() {defer wg.Done()performTask("Goroutine 1")}()go func() {defer wg.Done()performTask("Goroutine 2")}()// 等待两个 Goroutine 执行完毕wg.Wait()fmt.Println("示例 1 完成")// 示例 2:独立性fmt.Println("\n示例 2: 独立性")var data int = 0go func() {data++fmt.Println("Goroutine 1 修改 data 为:", data)}()go func() {data--fmt.Println("Goroutine 2 修改 data 为:", data)}()// 给 Goroutine 一些时间执行time.Sleep(1 * time.Second)fmt.Println("main 函数中 data 的值:", data)// 示例 3:创建 Goroutinefmt.Println("\n示例 3: 创建 Goroutine")go func() {fmt.Println("这是一个新的 Goroutine")}()fmt.Println("这是 main 函数中的代码")time.Sleep(1 * time.Second)
}// 模拟一个耗时的任务
func performTask(name string) {fmt.Printf("开始执行 %s 任务\n", name)time.Sleep(2 * time.Second)fmt.Printf("%s 任务执行完毕\n", name)
}