最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang基礎(chǔ)之Gocurrency并發(fā)

 更新時(shí)間:2018年07月19日 15:12:58   作者:failymao  
這篇文章主要介紹了golang基礎(chǔ)之Gocurrency并發(fā),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

goroutine只是由官方實(shí)現(xiàn)的超級(jí)"線程池"而已,每個(gè)實(shí)例4-5kb的棧內(nèi)存占用和用于實(shí)現(xiàn)機(jī)制而大幅減少的創(chuàng)建和銷(xiāo)毀開(kāi)銷(xiāo)。

并發(fā)不是并行(多CPU):  Concurrency Is Not Parallelism

并發(fā)主要由切換時(shí)間片來(lái)實(shí)現(xiàn)"同時(shí)"運(yùn)行,并行則是直接利用多核實(shí)現(xiàn)多線程的運(yùn)行,但Go可以設(shè)置使用核數(shù),以發(fā)揮多核計(jì)算機(jī)的能力。

  • 通過(guò)go關(guān)鍵字實(shí)現(xiàn)多線程
package main
import (
  "fmt"
  "time"
)

func Go() {
  fmt.Println("1234...") 

}

func main() {
  go Go()        //go關(guān)鍵字構(gòu)成多線程
  time.Sleep(2 * time.Second) //主程序睡眠2s
}

Goroutine 奉行通過(guò) 通信來(lái)共享內(nèi)存 ,而不是 共享內(nèi)存來(lái)通信 。

Channel

  • Channel是goroutine溝通的橋梁,大都是阻塞同步的
  • 通過(guò)make創(chuàng)建,close關(guān)閉(當(dāng)程序簡(jiǎn)單時(shí),回自動(dòng)關(guān)閉)
package main
import (
  "fmt"
)

func main() {         //主程序
  c := make(chan bool)   //初始化一個(gè)chan類(lèi)型
  go func() {        //子程序
    fmt.Println("123...") //執(zhí)行主程序
    c <- true       //通過(guò)<-存入bool類(lèi)型到chan中
  }()
fmt.Println(1)        //程序執(zhí)行步驟:1st
read_chan := <-c       //<-c 從chan中讀取bool,程序執(zhí)行步驟:2nd
fmt.Println(read_chan)    //程序執(zhí)行步驟:3rd
}

/*output
1st   1      
2nd   123...
3rd   true
*/

注意以上程序的執(zhí)行順序(channel無(wú)緩存時(shí)):先執(zhí)行讀取操作 c<-c ,因?yàn)閏hannel中沒(méi)有值,所以程序發(fā)生阻塞,此時(shí)執(zhí)行chanel 寫(xiě)操作 ,然后再執(zhí)行讀操作。

  • Channel是引用類(lèi)型
  • 可以使用 for range 來(lái)迭代不斷操作channel
package main
import (
  "fmt"
)

func main() {
  c := make(chan bool)   //初始化一個(gè)chan類(lèi)型
  go func() {        //go結(jié)合匿名函數(shù),構(gòu)造并發(fā)
    fmt.Println("123...") //執(zhí)行主程序
    c <- true       //通過(guò)<-存入bool類(lèi)型到chan中
    close(c)       //關(guān)閉通道:必須明確在哪個(gè)地方關(guān)閉
  }()

  for v := range c {    //for循環(huán)chanel
  }
}

/*output
  123...
  true
*/

  • 可以設(shè)置單向(讀&寫(xiě))或雙向通道--默認(rèn)是雙向通道
  • 可以設(shè)置緩存大?。J(rèn)為0,阻塞),在未被填充前不會(huì)發(fā)生阻塞(異步),比如緩存20個(gè),可以同時(shí)進(jìn)行20個(gè)讀操作或者寫(xiě)操作,注意 讀的操作先于寫(xiě)的操作
package main
import (
  "fmt"
)

func main() { //主程序
  c := make(chan bool, 1)  //初始化一個(gè)chan類(lèi)型,緩存為2
  go func() {        //子程序
    fmt.Println("123...") //執(zhí)行主程序,執(zhí)行步驟:2
    c <- true       //寫(xiě)操作,執(zhí)行步驟:2
  }()
  fmt.Println(2)      //執(zhí)行步驟:1
  fmt.Println(123, <-c)   //讀操作,執(zhí)行步驟:2
  fmt.Println(3)      //執(zhí)行步驟:3
}

/*output
1  2
2  123...
2  123 true
3  3
  */

設(shè)置緩存后,程序?yàn)楫惒?,讀,寫(xiě)操作同時(shí)完成,當(dāng)讀取channal中無(wú)數(shù)據(jù)時(shí),也不會(huì)造成堵塞,因?yàn)榕c此同時(shí),寫(xiě)操作也將發(fā)生。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Golang實(shí)現(xiàn)文件傳輸功能

    Golang實(shí)現(xiàn)文件傳輸功能

    這篇文章主要為大家詳細(xì)介紹了Golang實(shí)現(xiàn)文件傳輸功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • golang解析yaml文件操作

    golang解析yaml文件操作

    這篇文章主要介紹了golang解析yaml文件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • golang中defer的基本使用教程

    golang中defer的基本使用教程

    go語(yǔ)言中defer可以完成延遲功能,當(dāng)前函數(shù)執(zhí)行完成后再執(zhí)行defer的代碼塊,下面這篇文章主要給大家介紹了關(guān)于golang中defer基本使用的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • golang中json和struct的使用說(shuō)明

    golang中json和struct的使用說(shuō)明

    這篇文章主要介紹了golang中json和struct的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • 詳解Go語(yǔ)言中的內(nèi)存對(duì)齊

    詳解Go語(yǔ)言中的內(nèi)存對(duì)齊

    前面我們學(xué)習(xí)了Go語(yǔ)言空結(jié)構(gòu)體詳解,最近又在看unsafe包的知識(shí),在查閱相關(guān)資料時(shí)不免會(huì)看到內(nèi)存對(duì)齊相關(guān)的內(nèi)容。雖然不會(huì),但可以學(xué)呀,那么這篇文章,我們就一起來(lái)看下什么是內(nèi)存對(duì)齊吧
    2022-10-10
  • 從零開(kāi)始學(xué)Golang的接口

    從零開(kāi)始學(xué)Golang的接口

    本文主要介紹了從零開(kāi)始學(xué)Golang的接口,原文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 詳解Go如何基于現(xiàn)有的context創(chuàng)建新的context

    詳解Go如何基于現(xiàn)有的context創(chuàng)建新的context

    在?Golang?中,context?包提供了創(chuàng)建和管理上下文的功能,那么在GO語(yǔ)言中如何基于現(xiàn)有的context創(chuàng)建新的context,下面小編就來(lái)和大家詳細(xì)聊聊
    2024-01-01
  • GoFrame?gredis配置文件及配置方法對(duì)比

    GoFrame?gredis配置文件及配置方法對(duì)比

    這篇文章主要為大家介紹了GoFrame?gredis配置管理中,配置文件及配置方法對(duì)比,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 一文詳細(xì)介紹golang中.()類(lèi)型斷言的使用方法

    一文詳細(xì)介紹golang中.()類(lèi)型斷言的使用方法

    Golang是一門(mén)非常流行的編程語(yǔ)言,在很多領(lǐng)域都有著廣泛的應(yīng)用,在開(kāi)發(fā)過(guò)程中,很多時(shí)候我們需要將函數(shù)作為參數(shù)傳遞給其他函數(shù),這時(shí)候就需要用到golang中的.()用法,本文將詳細(xì)介紹golang中.()的使用方法,需要的朋友可以參考下
    2023-08-08
  • Go語(yǔ)言中Map的神奇操作小結(jié)

    Go語(yǔ)言中Map的神奇操作小結(jié)

    Map是一個(gè)強(qiáng)大而又有趣的工具,它可以幫助我們高效地存儲(chǔ)和操作鍵值對(duì)數(shù)據(jù),本文主要介紹了Go語(yǔ)言中Map的各種操作,包括增加、查找、刪除、遍歷等,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08

最新評(píng)論

福州市| 卓资县| 安吉县| 德清县| 苍梧县| 扎鲁特旗| 涪陵区| 公安县| 武平县| 平乐县| 永城市| 洪江市| 石台县| 桐乡市| 灵寿县| 万山特区| 武胜县| 鹤峰县| 华安县| 方正县| 呼伦贝尔市| 琼中| 彭阳县| 内江市| 卫辉市| 石林| 康定县| 潢川县| 中宁县| 靖宇县| 宣威市| 博客| 确山县| 元朗区| 清丰县| 禄劝| 抚远县| 古蔺县| 辽阳县| 郯城县| 都兰县|