欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

幾個(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í)候我們需要的是使程序阻塞在這一行,本文就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下

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

使用 sync.WaitGroup

一直等待直到 WaitGroup 等于 0

package main

import "sync"

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

空 select

select{}是一個(gè)沒(méi)有任何 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 都卡住了, 沒(méi)有一個(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)文章

  • Golang slice切片操作之切片的追加、刪除、插入等

    Golang slice切片操作之切片的追加、刪除、插入等

    這篇文章主要介紹了Golang slice切片操作之切片的追加、刪除、插入等,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • Go語(yǔ)言中日志的規(guī)范使用建議分享

    Go語(yǔ)言中日志的規(guī)范使用建議分享

    在任何服務(wù)端的語(yǔ)言項(xiàng)目中,日志是至關(guān)重要的組成部分,本文為大家整理了一些如何規(guī)范使用GO語(yǔ)言日志的建議,以及相應(yīng)的實(shí)際示例,希望對(duì)大家有事幫助
    2024-01-01
  • Go 切片導(dǎo)致內(nèi)存泄露的幾種原因

    Go 切片導(dǎo)致內(nèi)存泄露的幾種原因

    某些情況下,對(duì)一個(gè)已存在的切片或數(shù)組進(jìn)行切分操作可能會(huì)導(dǎo)致內(nèi)存泄漏,本文主要介紹了Go 切片導(dǎo)致內(nèi)存泄露的幾種原因,感興趣的可以了解一下
    2023-05-05
  • wind10 idea中 go 開(kāi)發(fā)環(huán)境搭建教程圖解

    wind10 idea中 go 開(kāi)發(fā)環(huán)境搭建教程圖解

    這篇文章主要介紹了wind10 idea中 go 開(kāi)發(fā)環(huán)境搭建過(guò)程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Go?Excelize?API源碼解析GetSheetFormatPr使用示例

    Go?Excelize?API源碼解析GetSheetFormatPr使用示例

    這篇文章主要為大家介紹了Go?Excelize?API源碼解析GetSheetFormatPr使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Golang泛型實(shí)現(xiàn)類型轉(zhuǎn)換的方法實(shí)例

    Golang泛型實(shí)現(xiàn)類型轉(zhuǎn)換的方法實(shí)例

    將一個(gè)值從一種類型轉(zhuǎn)換到另一種類型,便發(fā)生了類型轉(zhuǎn)換,下面這篇文章主要給大家介紹了關(guān)于Golang泛型實(shí)現(xiàn)類型轉(zhuǎn)換的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • Golang利用casbin實(shí)現(xiàn)權(quán)限驗(yàn)證詳解

    Golang利用casbin實(shí)現(xiàn)權(quán)限驗(yàn)證詳解

    Casbin是一個(gè)強(qiáng)大的、高效的開(kāi)源訪問(wèn)控制框架,其權(quán)限管理機(jī)制支持多種訪問(wèn)控制模型,Casbin只負(fù)責(zé)訪問(wèn)控制。本文將利用casbin實(shí)現(xiàn)權(quán)限驗(yàn)證功能,需要的可以參考一下
    2023-02-02
  • Go語(yǔ)言中DateTime的用法介紹

    Go語(yǔ)言中DateTime的用法介紹

    這篇文章介紹了Go語(yǔ)言中DateTime的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • go開(kāi)源Hugo站點(diǎn)構(gòu)建三步曲之集結(jié)渲染

    go開(kāi)源Hugo站點(diǎn)構(gòu)建三步曲之集結(jié)渲染

    這篇文章主要為大家介紹了go開(kāi)源Hugo站點(diǎn)構(gòu)建三步曲之集結(jié)渲染詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 使用Go+GoQuery庫(kù)實(shí)現(xiàn)頭條新聞采集

    使用Go+GoQuery庫(kù)實(shí)現(xiàn)頭條新聞采集

    在本文中,我們將介紹如何使用Go語(yǔ)言和GoQuery庫(kù)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的爬蟲(chóng)程序,用于抓取頭條新聞的網(wǎng)頁(yè)內(nèi)容,我們還將使用爬蟲(chóng)代理服務(wù),提高爬蟲(chóng)程序的性能和安全性,我們將使用多線程技術(shù),提高采集效率,最后,我們將展示爬蟲(chóng)程序的運(yùn)行結(jié)果和代碼,需要的朋友可以參考下
    2023-10-10

最新評(píng)論