go实现多线程
Go语言支持多线程,通过goroutines实现。goroutine是一种轻量级的线程,可以在单个线程中并发执行多个任务。使用goroutines可以让程序更高效地利用CPU资源,提高程序的并发处理能力。
下面是一个简单的使用goroutine的示例:
package main
import (
"fmt"
"time"
)
func main() {
go printNumbers()
go printLetters()
time.Sleep(time.Second)
}
func printNumbers() {
for i := 1; i <= 10; i++ {
fmt.Printf("%d ", i)
}
}
func printLetters() {
for i := 'A'; i <= 'J'; i++ {
fmt.Printf("%c ", i)
}
}
在上面的示例中,我们定义了两个函数printNumbers和printLetters,分别用于打印数字和字母。在main函数中,我们使用go关键字启动了两个goroutine,分别执行这两个函数。由于goroutine是并发执行的,所以它们会交错地打印数字和字母。
为了让程序等待两个goroutine执行完毕再退出,我们使用了time.Sleep函数。这里使用了time.Second,表示等待一秒钟。
除了使用go关键字启动goroutine外,还可以使用sync包提供的WaitGroup类型来同步多个goroutine的执行。WaitGroup类型提供了Add、Done、Wait等方法,用于控制goroutine的数量和同步它们的执行。下面是一个使用WaitGroup的示例:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
wg.Add(2)
go printNumbers(&wg)
go printLetters(&wg)
wg.Wait()
}
func printNumbers(wg *sync.WaitGroup) {
defer wg.Done()
for i := 1; i <= 10; i++ {
fmt.Printf("%d ", i)
}
}
func printLetters(wg *sync.WaitGroup) {
defer wg.Done()
for i := 'A'; i <= 'J'; i++ {
fmt.Printf("%c ", i)
}
}
在上面的示例中,我们定义了一个WaitGroup类型的变量wg,并通过wg.Add(2)方法告诉它我们要启动两个goroutine。在printNumbers和printLetters函数中,我们使用defer关键字和wg.Done()方法来告诉WaitGroup这个goroutine已经执行完毕。在主函数中,我们使用wg.Wait()方法来等待两个goroutine执行完毕。
原文地址: https://www.cveoy.top/t/topic/4Tm 著作权归作者所有。请勿转载和采集!