Goroutine是Go语言中的轻量级线程,由Go运行时环境(Goroutine Scheduler)进行调度。相比于传统的线程,Goroutine更加轻量级,一个Go程序可以同时启动成千上万个Goroutine,而不会对系统产生太大的压力。
在Go语言中,使用关键字"go"来启动一个Goroutine。当一个函数调用被go关键字修饰时,该函数会在一个新的Goroutine中异步执行。Goroutine的启动和销毁都非常快速,因此可以在程序中频繁地使用go关键字来创建Goroutine。
下面是一个简单的示例代码,展示了如何在Go中使用Goroutine:
package main
import ( "fmt" "time" )
func main() { go count("goroutine") // 在一个新的Goroutine中执行count函数 fmt.Println("main goroutine") // 打印主Goroutine的输出 time.Sleep(time.Second) // 等待一段时间,以确保Goroutine有足够的时间执行完成 }
func count(name string) { for i := 0; i < 5; i++ { fmt.Println(name, ":", i) // 打印该Goroutine的输出 time.Sleep(50 * time.Millisecond) // 模拟一些耗时的操作 } }
在上面的代码中,我们使用go关键字启动了一个新的Goroutine来执行count函数。在主Goroutine中,我们打印了一条消息("main goroutine"),然后等待一段时间以确保Goroutine有足够的时间执行完成。在count函数中,我们使用一个循环打印了5次消息,并使用time.Sleep函数模拟了一些耗时的操作。
运行上面的代码,你会看到"main goroutine"被首先打印出来,然后是"goroutine : 0"、"goroutine : 1"等消息交替输出。这表明主Goroutine和count函数在不同的Goroutine中并发执行。