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

Golang?channel為什么不會(huì)阻塞的原因詳解

 更新時(shí)間:2022年07月29日 08:40:44   作者:燒麥?212  
這篇文章主要為大家介紹了Golang?channel為什么不會(huì)阻塞的原因詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

最近在學(xué)通道channel,發(fā)現(xiàn)一個(gè)簡單的demo:

package main
import "fmt"
func main() {
    chanInt := make(chan int)
    go func() {
        chanInt <- 100
    }()
    res := <-chanInt
    fmt.Println(res)
}

輸出結(jié)果是100,這個(gè)沒有問題。但是之前在學(xué)goroutine的時(shí)候有看到過一個(gè)例子:

package main
import "fmt"
func hello() {
    fmt.Println("Hello Goroutine!")
}
func main() {
    go hello() // 啟動(dòng)另外一個(gè)goroutine去執(zhí)行hello函數(shù)
    fmt.Println("main goroutine done!")
}

這個(gè)例子輸出的只有:main goroutine done! 并沒有Hello Goroutine!

看過解釋:在程序啟動(dòng)時(shí),Go程序就會(huì)為main()函數(shù)創(chuàng)建一個(gè)默認(rèn)的goroutine。當(dāng)main()函數(shù)返回的時(shí)候該goroutine就結(jié)束了,所有在main()函數(shù)中啟動(dòng)的goroutine會(huì)一同結(jié)束

那么這個(gè)解釋放到第一個(gè)例子為什么不適用了?

ps:我得理解是:運(yùn)行到res := <-chanInt這句會(huì)阻塞,直到協(xié)程寫入通道后,就馬上讀取,繼續(xù)執(zhí)行打印語句。不知道理解的對(duì)不對(duì)?

然后就是關(guān)于阻塞的情況,比如我把第一個(gè)例子改一下:

package main
import (
    "fmt"
    "time"
)
func main() {
    chanInt := make(chan int)
    go func() {
        chanInt &lt;- 100
    }()
    time.Sleep(10 * time.Second)
    res := &lt;-chanInt
    fmt.Println(res)
}

多了time.Sleep(10 * time.Second)等待10秒鐘,10秒后輸出100,這個(gè)沒有問題。

然后再看一個(gè)例子:

func main() {
    chanInt := make(chan int)
    chanInt &lt;- 100
    res := &lt;-chanInt
    fmt.Println(res)
}

這個(gè)例子就會(huì)死鎖,阻塞在chanInt <- 100這句,發(fā)現(xiàn)沒有接收者所以死鎖了,這邊不理解的是:睡眠10秒的時(shí)候,在這10秒里面為什么不會(huì)造成死鎖?而最后一個(gè)例子一運(yùn)行馬上報(bào)死鎖?更多關(guān)于Golang channel不會(huì)阻塞的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 為什么不建議在go項(xiàng)目中使用init()

    為什么不建議在go項(xiàng)目中使用init()

    這篇文章主要介紹了為什么不建議在go項(xiàng)目中使用init(),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Prometheus Go client library使用方式詳解

    Prometheus Go client library使用方式詳解

    這篇文章主要為大家介紹了Prometheus Go client library使用方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Go接口的用法詳解

    Go接口的用法詳解

    本文主要介紹了Go接口的用法詳解,包括定義接口、實(shí)現(xiàn)接口、使用接口、空接口等,通過接口,可以實(shí)現(xiàn)多態(tài)性,即一個(gè)對(duì)象可以實(shí)現(xiàn)多個(gè)接口,從而實(shí)現(xiàn)不同接口的行為,感興趣的可以了解一下
    2023-11-11
  • go語言time.After()的作用

    go語言time.After()的作用

    time.After 是 Go 語言中的一個(gè)函數(shù),用于返回一個(gè)定時(shí)器通道,該通道在指定時(shí)間后發(fā)送當(dāng)前時(shí)間,這個(gè)功能常用于超時(shí)控制和延遲執(zhí)行,本文就來詳細(xì)的介紹一下,感興趣的可以了解學(xué)習(xí)
    2024-10-10
  • Go語言中進(jìn)行API限流的實(shí)戰(zhàn)詳解

    Go語言中進(jìn)行API限流的實(shí)戰(zhàn)詳解

    API?限流是控制和管理應(yīng)用程序訪問量的重要手段,旨在防止惡意濫用、保護(hù)后端服務(wù)的穩(wěn)定性和可用性,下面我們就來看看如何在Go語言中具體實(shí)現(xiàn)吧
    2025-01-01
  • Nunu快速構(gòu)建高效可靠Go應(yīng)用腳手架使用詳解

    Nunu快速構(gòu)建高效可靠Go應(yīng)用腳手架使用詳解

    這篇文章主要為大家介紹了如何使用Nunu快速構(gòu)建高效可靠Go應(yīng)用腳手架詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Golang使用gofumpt進(jìn)行代碼格式化

    Golang使用gofumpt進(jìn)行代碼格式化

    這篇文章主要為大家詳細(xì)介紹了Golang如何使用gofumpt進(jìn)行代碼格式化,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • Go垃圾回收提升內(nèi)存管理效率優(yōu)化最佳實(shí)踐

    Go垃圾回收提升內(nèi)存管理效率優(yōu)化最佳實(shí)踐

    這篇文章主要為大家介紹了Go垃圾回收提升內(nèi)存管理效率優(yōu)化最佳實(shí)踐,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 一文詳解Golang的模塊版本管理與語義版本控制

    一文詳解Golang的模塊版本管理與語義版本控制

    在Golang中,模塊(module)是Go 1.11版本引入的依賴管理系統(tǒng),幫助開發(fā)者管理項(xiàng)目的依賴,在Go模塊推出之前,開發(fā)者通常使用GOPATH和vendor目錄來管理項(xiàng)目的依賴,本文將給大家詳細(xì)介紹Golang的模塊版本管理與語義版本控制,需要的朋友可以參考下
    2023-12-12
  • go語言工程結(jié)構(gòu)

    go語言工程結(jié)構(gòu)

    這篇文章主要簡單介紹了go語言工程結(jié)構(gòu),對(duì)于我們學(xué)習(xí)go語言很有幫助,需要的朋友可以參考下
    2015-01-01

最新評(píng)論

怀柔区| 科尔| 格尔木市| 邳州市| 阳泉市| 石林| 呼伦贝尔市| 东阿县| 新乡县| 德惠市| 石景山区| 滁州市| 和田县| 东丰县| 漾濞| 饶平县| 册亨县| 肃宁县| 英超| 武汉市| 开江县| 泾川县| 天气| 桦甸市| 四子王旗| 蒙山县| 雅江县| 白河县| 晋城| 南雄市| 泾川县| 香格里拉县| 天门市| 嘉善县| 曲阜市| 平度市| 惠来县| 兴城市| 顺义区| 洪雅县| 满洲里市|