日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)GO教程:Go語言并發(fā)打印(借助通道實(shí)現(xiàn))

前面的例子創(chuàng)建的都是無緩沖通道。使用無緩沖通道往里面裝入數(shù)據(jù)時(shí),裝入方將被阻塞,直到另外通道在另外一個(gè) goroutine 中被取出。同樣,如果通道中沒有放入任何數(shù)據(jù),接收方試圖從通道中獲取數(shù)據(jù)時(shí),同樣也是阻塞。發(fā)送和接收的操作是同步完成的。

龍泉網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),龍泉網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為龍泉千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請找那個(gè)售后服務(wù)好的龍泉做網(wǎng)站的公司定做!

下面通過一個(gè)并發(fā)打印的例子,將 goroutine 和 channel 放在一起展示它們的用法。

package main

import (
    "fmt"
)

func printer(c chan int) {

    // 開始無限循環(huán)等待數(shù)據(jù)
    for {

        // 從channel中獲取一個(gè)數(shù)據(jù)
        data := <-c

        // 將0視為數(shù)據(jù)結(jié)束
        if data == 0 {
            break
        }

        // 打印數(shù)據(jù)
        fmt.Println(data)
    }

    // 通知main已經(jīng)結(jié)束循環(huán)(我搞定了!)
    c <- 0

}

func main() {

    // 創(chuàng)建一個(gè)channel
    c := make(chan int)

    // 并發(fā)執(zhí)行printer, 傳入channel
    go printer(c)

    for i := 1; i <= 10; i++ {

        // 將數(shù)據(jù)通過channel投送給printer
        c <- i
    }

    // 通知并發(fā)的printer結(jié)束循環(huán)(沒數(shù)據(jù)啦!)
    c <- 0

    // 等待printer結(jié)束(搞定喊我!)
    <-c

}

運(yùn)行代碼,輸出如下:

1
2
3
4
5
6
7
8
9
10

代碼說明如下:

  • 第 10 行,創(chuàng)建一個(gè)無限循環(huán),只有當(dāng)?shù)?16 行獲取到的數(shù)據(jù)為 0 時(shí)才會(huì)退出循環(huán)。
  • 第 13 行,從函數(shù)參數(shù)傳入的通道中獲取一個(gè)整型數(shù)值。
  • 第 21 行,打印整型數(shù)值。
  • 第 25 行,在退出循環(huán)時(shí),通過通道通知 main() 函數(shù)已經(jīng)完成工作。
  • 第 32 行,創(chuàng)建一個(gè)整型通道進(jìn)行跨 goroutine 的通信。
  • 第 35 行,創(chuàng)建一個(gè) goroutine,并發(fā)執(zhí)行 printer() 函數(shù)。
  • 第 37 行,構(gòu)建一個(gè)數(shù)值循環(huán),將 1~10 的數(shù)通過通道傳送給 printer 構(gòu)造出的 goroutine。
  • 第 44 行,給通道傳入一個(gè) 0,表示將前面的數(shù)據(jù)處理完成后,退出循環(huán)。
  • 第 47 行,在數(shù)據(jù)發(fā)送過去后,因?yàn)椴l(fā)和調(diào)度的原因,任務(wù)會(huì)并發(fā)執(zhí)行。這里需要等待 printer 的第 25 行返回?cái)?shù)據(jù)后,才可以退出 main()。

本例的 設(shè)計(jì)模式就是典型的生產(chǎn)者和消費(fèi)者。生產(chǎn)者是第 37 行的循環(huán),而消費(fèi)者是 printer() 函數(shù)。整個(gè)例子使用了兩個(gè) goroutine,一個(gè)是 main(),一個(gè)是通過第 35 行 printer() 函數(shù)創(chuàng)建的 goroutine。兩個(gè) goroutine 通過第 32 行創(chuàng)建的通道進(jìn)行通信。這個(gè)通道有下面兩重功能。

  • 數(shù)據(jù)傳送:第 40 行中發(fā)送數(shù)據(jù)和第 13 行接收數(shù)據(jù)。
  • 控制指令:類似于信號(hào)量的功能。同步 goroutine 的操作。功能簡單描述為:
    • 第 44 行:“沒數(shù)據(jù)啦!”
    • 第 25 行:“我搞定了!”
    • 第 47 行:“搞定喊我!”

當(dāng)前名稱:創(chuàng)新互聯(lián)GO教程:Go語言并發(fā)打?。ń柚ǖ缹?shí)現(xiàn))
當(dāng)前網(wǎng)址:http://www.5511xx.com/article/cdpeiog.html