卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章52414本站已运行31128

golang函数如何与goroutine交互?

go 函数通过 channel 传递数据、wait group 或 channel 控制执行流、mutex 或 channel 同步任务来与 goroutine 交互:传递数据:使用 channel 作为 fifo 队列,从函数向协程发送和接收值。控制执行流:使用 wait group 等待协程完成执行,或使用 channel 通知协程执行特定操作。同步任务:使用 mutex 或 channel 对并发访问的资源进行同步,确保一次只有一个协程访问资源。

golang函数如何与goroutine交互?

Go 函数如何与 Goroutine 交互?

在 Go 中,Goroutine 是并发执行的轻量级线程。它们允许您并行运行代码,提高应用程序性能。函数可以与协程交互以控制执行流、传递数据和同步任务。

传递数据

可以通过 channel 将数据从函数传递到协程。Channel 是一个 FIFO(先进先出)队列,允许协程从函数接收和发送值。以下示例展示了如何使用 channel:

package main

import "fmt"

func sendData(ch chan<- int) {
    for i := 0; i < 10; i++ {
        ch <- i
    }
    close(ch)
}

func receiveData(ch <-chan int) {
    for {
        data, ok := <-ch
        if !ok {
            return
        }
        fmt.Println("Received:", data)
    }
}

func main() {
    ch := make(chan int)
    go sendData(ch)
    receiveData(ch)
}

控制执行流

可以使用 wait group 或 channel 控制协程的执行流。Wait group 允许您等待所有协程完成执行,而 channel 可用于通知协程执行特定操作。以下示例展示了如何使用 wait group:

package main

import (
    "fmt"
    "sync"
)

var wg sync.WaitGroup

func task(i int) {
    fmt.Println("Task", i)
    wg.Done()
}

func main() {
    for i := 0; i < 10; i++ {
        wg.Add(1)
        go task(i)
    }
    wg.Wait()
}

同步任务

可以通过 mutex 或 channel 对并发访问的资源进行同步。Mutex 互斥锁,一次允许一个协程访问资源。Channel 可用于阻塞协程,直到资源可用。以下示例展示了如何使用 mutex:

package main

import (
    "fmt"
    "sync"
)

var mutex sync.Mutex

func task(data string) {
    mutex.Lock()
    fmt.Println(data)
    mutex.Unlock()
}

func main() {
    for i := 0; i < 10; i++ {
        go task(fmt.Sprintf("Task %d", i))
    }
}
卓越飞翔博客
上一篇: C++ 函数库详解:系统功能外延与跨平台开发
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏