最新国产好看的视频,伊人天堂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è)簡(jiǎn)單的demo:

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

輸出結(jié)果是100,這個(gè)沒(méi)有問(wèn)題。但是之前在學(xué)goroutine的時(shí)候有看到過(guò)一個(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! 并沒(méi)有Hello Goroutine!

看過(guò)解釋?zhuān)涸诔绦騿?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é)程寫(xiě)入通道后,就馬上讀取,繼續(xù)執(zhí)行打印語(yǔ)句。不知道理解的對(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è)沒(méi)有問(wèn)題。

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

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

這個(gè)例子就會(huì)死鎖,阻塞在chanInt <- 100這句,發(fā)現(xiàn)沒(méi)有接收者所以死鎖了,這邊不理解的是:睡眠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)接口、使用接口、空接口等,通過(guò)接口,可以實(shí)現(xiàn)多態(tài)性,即一個(gè)對(duì)象可以實(shí)現(xiàn)多個(gè)接口,從而實(shí)現(xiàn)不同接口的行為,感興趣的可以了解一下
    2023-11-11
  • go語(yǔ)言time.After()的作用

    go語(yǔ)言time.After()的作用

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

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

    API?限流是控制和管理應(yīng)用程序訪問(wèn)量的重要手段,旨在防止惡意濫用、保護(hù)后端服務(wù)的穩(wěn)定性和可用性,下面我們就來(lái)看看如何在Go語(yǔ)言中具體實(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的模塊版本管理與語(yǔ)義版本控制

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

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

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

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

最新評(píng)論

敦煌市| 铁岭县| 揭东县| 论坛| 舒兰市| 新余市| 连南| 疏勒县| 酉阳| 宁海县| 日喀则市| 临夏县| 清水县| 台湾省| 兖州市| 沂源县| 山西省| 兴业县| 秭归县| 酉阳| 凌云县| 随州市| 鸡东县| 云浮市| 寻甸| 上蔡县| 湘潭县| 固安县| 盐源县| 梅河口市| 射洪县| 鄂州市| 双流县| 卢湾区| 崇阳县| 荣昌县| 宁晋县| 双辽市| 金坛市| 虹口区| 呼和浩特市|