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 著作权归作者所有。请勿转载和采集!