温馨提示×

go语言多线程怎么使用

小亿
111
2023-08-31 02:53:40
栏目: 编程语言

在Go语言中,可以使用goroutine来实现多线程的功能。goroutine是Go语言中的轻量级线程,它可以在一个程序中同时执行多个任务。

使用goroutine非常简单,只需要在函数调用的前面加上关键字"go"即可。以下是一个示例:

package main
import (
"fmt"
"time"
)
func sayHello() {
for i := 0; i < 5; i++ {
fmt.Println("Hello")
time.Sleep(time.Millisecond * 500)
}
}
func sayWorld() {
for i := 0; i < 5; i++ {
fmt.Println("World")
time.Sleep(time.Millisecond * 500)
}
}
func main() {
go sayHello()  // 启动一个新的goroutine执行sayHello函数
sayWorld()     // 在主goroutine中执行sayWorld函数
// 等待一段时间,以保证其他goroutine有足够的时间执行完毕
time.Sleep(time.Second * 3)
}

在上面的例子中,我们通过go sayHello()启动了一个新的goroutine来执行sayHello函数,并且在主goroutine中继续执行sayWorld函数。由于goroutine是并发执行的,因此sayHellosayWorld函数会交替打印输出,而不是按顺序执行。

需要注意的是,在上面的例子中我们使用了time.Sleep函数来等待一段时间,以保证其他goroutine有足够的时间执行完毕。在实际开发中,可能需要使用更加复杂的同步机制来控制多个goroutine之间的协作。

除了使用go关键字启动goroutine外,还可以使用sync.WaitGroup来等待所有goroutine执行完毕。以下是一个使用sync.WaitGroup的示例:

package main
import (
"fmt"
"sync"
)
func sayHello(wg *sync.WaitGroup) {
defer wg.Done()  // goroutine执行完毕后通知WaitGroup
fmt.Println("Hello")
}
func sayWorld(wg *sync.WaitGroup) {
defer wg.Done()  // goroutine执行完毕后通知WaitGroup
fmt.Println("World")
}
func main() {
var wg sync.WaitGroup
wg.Add(2)  // 设置WaitGroup的计数器为2
go sayHello(&wg)
go sayWorld(&wg)
wg.Wait()  // 等待所有goroutine执行完毕
}

在上面的例子中,我们首先创建了一个sync.WaitGroup,并且通过wg.Add(2)将计数器设置为2,表示需要等待两个goroutine执行完毕。在每个goroutine的最后,我们使用wg.Done()通知WaitGroup,表示这个goroutine已经执行完毕。最后,我们使用wg.Wait()等待所有goroutine执行完毕。

0