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

幾個(gè)小技巧幫你實(shí)現(xiàn)Golang永久阻塞

 更新時(shí)間:2021年12月08日 09:56:08   作者:折疊椅  
Go 的運(yùn)行時(shí)的當(dāng)前設(shè)計(jì),假定程序員自己負(fù)責(zé)檢測(cè)何時(shí)終止一個(gè) goroutine 以及何時(shí)終止該程序。有時(shí)候我們需要的是使程序阻塞在這一行,本文就來詳細(xì)的介紹一下,感興趣的可以了解一下

Go 的運(yùn)行時(shí)的當(dāng)前設(shè)計(jì),假定程序員自己負(fù)責(zé)檢測(cè)何時(shí)終止一個(gè) goroutine 以及何時(shí)終止該程序。可以通過調(diào)用 os.Exit 或從 main() 函數(shù)的返回來以正常方式終止程序。而有時(shí)候我們需要的是使程序阻塞在這一行。

使用 sync.WaitGroup

一直等待直到 WaitGroup 等于 0

package main

import "sync"

func main() {
    var wg sync.WaitGroup
    wg.Add(1)
    wg.Wait()
}

空 select

select{}是一個(gè)沒有任何 case 的 select,它會(huì)一直阻塞

package main

func main() {
    select{}
}

死循環(huán)

雖然能阻塞,但會(huì) 100%占用一個(gè) cpu。不建議使用

package main

func main() {
    for {}
}

用 sync.Mutex

一個(gè)已經(jīng)鎖了的鎖,再鎖一次會(huì)一直阻塞,這個(gè)不建議使用

package main

import "sync"

func main() {
    var m sync.Mutex
    m.Lock()
}

os.Signal

系統(tǒng)信號(hào)量,在 go 里面也是個(gè) channel,在收到特定的消息之前一直阻塞

package main

import (
    "os"
    "syscall"
    "os/signal"
)

func main() {
    sig := make(chan os.Signal, 2)
    signal.Notify(sig, syscall.SIGTERM, syscall.SIGINT)
    <-sig
}

空 channel 或者 nil channel

channel 會(huì)一直阻塞直到收到消息,nil channel 永遠(yuǎn)阻塞。

package main

func main() {
    c := make(chan struct{})
    <-c
}
package main

func main() {
    var c chan struct{} //nil channel
    <-c
}

總結(jié)

注意上面寫的的代碼大部分不能直接運(yùn)行,都會(huì) panic,提示“all goroutines are asleep - deadlock!”,因?yàn)?go 的 runtime 會(huì)檢查你所有的 goroutine 都卡住了, 沒有一個(gè)要執(zhí)行。你可以在阻塞代碼前面加上一個(gè)或多個(gè)你自己業(yè)務(wù)邏輯的 goroutine,這樣就不會(huì) deadlock 了。

參考

https://pliutau.com/different-ways-to-block-go-runtime-forever/

到此這篇關(guān)于幾個(gè)小技巧幫你實(shí)現(xiàn)Golang永久阻塞的文章就介紹到這了,更多相關(guān)Golang永久阻塞內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • GO 使用Webhook 實(shí)現(xiàn)github 自動(dòng)化部署的方法

    GO 使用Webhook 實(shí)現(xiàn)github 自動(dòng)化部署的方法

    這篇文章主要介紹了GO 使用Webhook 實(shí)現(xiàn)github 自動(dòng)化部署的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • vscode配置go開發(fā)環(huán)境的實(shí)戰(zhàn)過程

    vscode配置go開發(fā)環(huán)境的實(shí)戰(zhàn)過程

    vscode配置go的開發(fā)環(huán)境很簡(jiǎn)單,下面這篇文章主要給大家介紹了關(guān)于vscode配置go開發(fā)環(huán)境的實(shí)戰(zhàn)過程,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Go與Redis實(shí)現(xiàn)分布式互斥鎖和紅鎖

    Go與Redis實(shí)現(xiàn)分布式互斥鎖和紅鎖

    這篇文章主要介紹了Go與Redis實(shí)現(xiàn)分布式互斥鎖和紅鎖,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • 淺析golang開發(fā)Error的使用詳解

    淺析golang開發(fā)Error的使用詳解

    Error是Go語言開發(fā)中最基礎(chǔ)也是最重要的部分,很多朋友不明白goland error的一些基本使用方法,今天通過本文給大家詳細(xì)介紹下,需要的朋友參考下吧
    2021-07-07
  • golang內(nèi)存對(duì)齊的概念及案例詳解

    golang內(nèi)存對(duì)齊的概念及案例詳解

    為保證程序順利高效的運(yùn)行,編譯器會(huì)把各種類型的數(shù)據(jù)安排到合適的地址,并占用合適的長(zhǎng)度,這就是內(nèi)存對(duì)齊。本文重點(diǎn)給大家介紹golang內(nèi)存對(duì)齊的概念及案例詳解,感興趣的朋友一起看看吧
    2022-02-02
  • Go 庫(kù)性能分析工具pprof

    Go 庫(kù)性能分析工具pprof

    這篇文章主要為大家介紹了Go 庫(kù)性能分析工具pprof,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 關(guān)于升級(jí)go1.18的goland問題詳解

    關(guān)于升級(jí)go1.18的goland問題詳解

    作為一個(gè)go語言程序員,覺得自己有義務(wù)為go新手開一條更簡(jiǎn)單便捷的上手之路,下面這篇文章主要給大家介紹了關(guān)于升級(jí)go1.18的goland問題的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 使用Go語言與MQTT進(jìn)行通信的示例代碼

    使用Go語言與MQTT進(jìn)行通信的示例代碼

    本文介紹了如何使用 Go 編程語言與 MQTT(Message Queuing Telemetry Transport)進(jìn)行通信,MQTT 是一種輕量級(jí)的消息傳輸協(xié)議,廣泛應(yīng)用于物聯(lián)網(wǎng)和實(shí)時(shí)通信場(chǎng)景,通過本文的指導(dǎo),您將學(xué)習(xí)如何使用 Go 語言創(chuàng)建 MQTT 客戶端,進(jìn)行消息的發(fā)布和訂閱,需要的朋友可以參考下
    2023-12-12
  • 深入了解Golang中占位符的使用

    深入了解Golang中占位符的使用

    在寫?golang?的時(shí)候,也是有對(duì)應(yīng)的格式控制符,也叫做占位符,寫這個(gè)占位符,需要有對(duì)應(yīng)的數(shù)據(jù)與之對(duì)應(yīng),不能瞎搞。本文就來和大家聊聊Golang中占位符的使用,希望對(duì)大家有所幫助
    2023-03-03
  • 深入理解Golang?make和new的區(qū)別及實(shí)現(xiàn)原理

    深入理解Golang?make和new的區(qū)別及實(shí)現(xiàn)原理

    在Go語言中,有兩個(gè)比較雷同的內(nèi)置函數(shù),分別是new和make方法,二者都可以用來分配內(nèi)存,那他們有什么區(qū)別呢?下面我們就從底層來分析一下二者的不同。感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助
    2022-10-10

最新評(píng)論

阜城县| 峡江县| 霍林郭勒市| 赤城县| 河曲县| 广宁县| 清水河县| 格尔木市| 闽侯县| 汾西县| 寿宁县| 茌平县| 商城县| 长沙市| 綦江县| 毕节市| 双桥区| 汾阳市| 赞皇县| 德阳市| 衡东县| 木兰县| 巨鹿县| 临高县| 五指山市| 长沙市| 冀州市| 辉南县| 屏边| 美姑县| 始兴县| 文化| 徐闻县| 青海省| 乌兰察布市| 改则县| 东乡| 渭源县| 孙吴县| 松溪县| 西丰县|