自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Go Channel應(yīng)用:協(xié)程間信息同步

開發(fā) 前端
在fastcache開源項(xiàng)目中,有個功能是將數(shù)據(jù)保存到文件中。在保存函數(shù)中用到了并發(fā)保存,同時需要將每個保存的結(jié)果輸出。下面就是通過通道來接收每個協(xié)程的保存結(jié)果的功能。

大家好,我是漁夫子。

今天給大家介紹的go channel的第二種應(yīng)用:協(xié)程間同步信息。

通過channel,能夠確保一個協(xié)程在另一個協(xié)程完成工作之后才能繼續(xù)。如果需要在兩個或多個協(xié)程之間共享數(shù)據(jù)的場景中,這種用法就特別有用,并且能夠確保數(shù)據(jù)不會同時被多個協(xié)程修改非常重要。

我們先看一個簡單的示例:

package main

import (
    "fmt"
    "time"
)

func worker(done chan bool) {
    fmt.Print("working...")
    time.Sleep(time.Second)
    fmt.Println("done")

    done <- true
}

func main() {
    done := make(chan bool, 1)
    go worker(done)

    <-done
}

在這個示例中,我們創(chuàng)建了一個worker協(xié)程,同時在main協(xié)程中創(chuàng)建了一個done通道。當(dāng)worker協(xié)程完成工作后,往done通道中發(fā)送了一個true,代表通知main協(xié)程worker執(zhí)行完畢了。

開源項(xiàng)目中的應(yīng)用

接下來我們看幾個開源項(xiàng)目中的示例。

應(yīng)用一:利用通道進(jìn)行平滑關(guān)閉

在gin框架的example中,有一個關(guān)閉服務(wù)的示例,就是利用了通道來在兩個協(xié)程間進(jìn)行通訊的特性。如下:

圖片圖片

這里就是在main協(xié)程中創(chuàng)建了一個quit通道,然后并將該quit通道傳遞給signal.Notify函數(shù),然后通過<-quit阻塞等待signal.Notify函數(shù)執(zhí)行完畢。在signal.Notify中其實(shí)是注冊并監(jiān)聽syscall.SIGTERM信號,通過啟動了一個新的協(xié)程來監(jiān)聽該信號。當(dāng)該信號發(fā)生時,就往quit通道中寫入一個os.Signal的數(shù)據(jù)。

應(yīng)用二:fastcache中利用通道輸出結(jié)果

在fastcache開源項(xiàng)目中,有個功能是將數(shù)據(jù)保存到文件中。在保存函數(shù)中用到了并發(fā)保存,同時需要將每個保存的結(jié)果輸出。下面就是通過通道來接收每個協(xié)程的保存結(jié)果的功能。如下:

圖片圖片

在上圖中,首先在save函數(shù)中初始化了一個results通道,然后將saveBuckets的結(jié)果輸出到results。在save函數(shù)的最下面,通過從results等待輸出每次saveBuckets的結(jié)果。你看,這里就是通過results通道將子協(xié)程中的結(jié)果輸出給save函數(shù)(父協(xié)程)了。

好了,今天通道的應(yīng)用案例就分享到這里了。

責(zé)任編輯:武曉燕 來源: Go學(xué)堂
相關(guān)推薦

2023-07-13 08:06:05

應(yīng)用協(xié)程阻塞

2024-05-29 08:05:15

Go協(xié)程通信

2016-10-28 17:39:47

phpgolangcoroutine

2018-12-04 14:00:41

協(xié)程編程模式PHP

2024-12-03 15:15:22

2021-05-21 08:21:57

Go語言基礎(chǔ)技術(shù)

2020-12-27 10:15:44

Go語言channel管道

2021-04-25 09:36:20

Go協(xié)程線程

2024-06-27 07:56:49

2025-02-28 09:04:08

2021-09-16 09:59:13

PythonJavaScript代碼

2022-10-28 10:45:22

Go協(xié)程GoFrame

2024-08-27 09:46:39

Go協(xié)程效率

2021-09-27 23:28:29

Go多協(xié)程并發(fā)

2023-11-17 11:36:59

協(xié)程纖程操作系統(tǒng)

2024-07-01 08:44:42

Go語言協(xié)程

2025-02-08 09:13:40

2021-12-09 06:41:56

Python協(xié)程多并發(fā)

2023-10-24 19:37:34

協(xié)程Java

2025-01-26 00:00:15

PHP協(xié)程控制權(quán)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號