真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

golang并發(fā)編程之channel

一、概念

channel是golang語言級別提供的協(xié)程(goroutine)之間的通信方式。
goroutine運行在相同的地址空間,因此訪問共享內(nèi)存必須做好同步。那么goroutine之間如何進行數(shù)據(jù)的通信呢,Go提供了一個很好的通信機制channel。channel可以與Unix shell 中的雙向管道做類比:可以通過它發(fā)送或者接收值。這些值只能是特定的類型:channel類型。定義一個channel時,也需要聲明發(fā)送到channel的值的類型。

成都網(wǎng)絡公司-成都網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)十年經(jīng)驗成就非凡,專業(yè)從事網(wǎng)站設(shè)計制作、網(wǎng)站制作,成都網(wǎng)頁設(shè)計,成都網(wǎng)頁制作,軟文營銷,一元廣告等。十年來已成功提供全面的成都網(wǎng)站建設(shè)方案,打造行業(yè)特色的成都網(wǎng)站建設(shè)案例,建站熱線:18980820575,我們期待您的來電!

二、聲明方式
    var chanName chan ElementType
    var ch chan int
    使用make,可以指定channel容量
    ch = make(chan int)
三、channel得讀和寫

channel通過操作符<-來接收和發(fā)送數(shù)據(jù)
默認情況下,channel接收和發(fā)送數(shù)據(jù)都是阻塞的,除非另一端已經(jīng)準備好,這樣就使得Goroutines同步變的更加的簡單,而不需要顯式的lock。所謂阻塞,也就是如果讀?。╲alue := <-ch)它將會被阻塞,直到有數(shù)據(jù)接收。其次,任何發(fā)送(ch<-5)將會被阻塞,直到數(shù)據(jù)被讀出。無緩沖channel是在多個goroutine之間同步很棒的工具。

ch <- v    // 發(fā)送v的值到channel ch-> 寫數(shù)據(jù)
v := <- ch // 從ch中接收數(shù)據(jù),并賦值給v ->讀數(shù)據(jù)
四、代碼實現(xiàn)
package main

import (
    "fmt"
    "strconv"
)

//定義一個加法函數(shù),傳入channel類型,每計算一次,quit加1
func Add(x, y int, quit chan int)  {
    z := x + y
    fmt.Println(z)

    //寫數(shù)據(jù)
    quit <- 1

}

//接受數(shù)據(jù),并賦值給我
func Read(ch chan int)  {
    value := <- ch

    fmt.Println("value" + strconv.Itoa(value))

}

func Write(ch chan int)  {
    //ch <- 10

}

func main()  {

    //定義一個channel類型切片數(shù)組
    chs := make([]chan int, 10)

    //循環(huán)執(zhí)行加法函數(shù)
    for i := 0; i < 10; i++ {
        //拿取一個channel
        chs[i] = make(chan int)
        //執(zhí)行g(shù)oroutine和發(fā)送一個channel類型數(shù)據(jù)
        go Add(i, i, chs[i])
    }

    for _, v := range chs {
        //接口channel類型數(shù)據(jù)
        <- v
    }
}

網(wǎng)站標題:golang并發(fā)編程之channel
網(wǎng)站URL:http://weahome.cn/article/jjpije.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部