偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Go開發(fā) Channel 徹底研究之Select基礎(chǔ)

開發(fā) 前端
如果都不能執(zhí)行,且有default語(yǔ)句時(shí),就執(zhí)行default,如果沒有default語(yǔ)句,那么select整個(gè)就會(huì)阻塞(導(dǎo)致所在協(xié)程阻塞),直到解除。

為什么需要select?

有時(shí)會(huì)遇到這種情景:需要對(duì)多個(gè)channel進(jìn)行監(jiān)聽。

如圖所示,就像一個(gè)人監(jiān)聽多個(gè)通道一樣,假如采用for循環(huán)形式

for{
d1,ok:=<-c1
//...
d2,ok:=<-c2
//...
....
}

這個(gè)方式肯定走不通,原因是一旦某個(gè)通道監(jiān)聽阻塞了,下面的部分都不會(huì)執(zhí)行到。有沒有一種方法,像治安巡查一樣一輪輪的輪詢,那么就可以解決這個(gè)問題了。

go提供了select,正對(duì)應(yīng)輪詢的思路,模式如下:

select{
case xx:
case xx:
case xx:
default:xx
}

運(yùn)行過程

從上往下“巡查”,如果發(fā)現(xiàn)哪個(gè)case處于可執(zhí)行狀態(tài),就執(zhí)行該條語(yǔ)句,那么其余語(yǔ)句就不執(zhí)行了。

如果都不能執(zhí)行,且有default語(yǔ)句時(shí),就執(zhí)行default

如果沒有default語(yǔ)句,那么select整個(gè)就會(huì)阻塞(導(dǎo)致所在協(xié)程阻塞),直到解除。

但有人會(huì)有疑問,上面這些語(yǔ)句不是只能輪詢一次嗎?這個(gè)容易解決,我們給select外層再加一個(gè)for循環(huán),這樣就可以無(wú)限的輪詢。

for{
select{
case xx:
case xx:
........
}
}

模式基本形成了。

客戶和服務(wù)端交互模擬

下面先看一個(gè)基礎(chǔ)的例子,主要用來(lái)模仿客戶和服務(wù)端的交互,模型如下:

ch := make(chan string)

//模擬啟動(dòng)服務(wù)端
go func(ch chan string) {
for {
data := <-ch
fmt.Println("服務(wù)端接收到數(shù)據(jù):", data)
time.Sleep(time.Second * 2)
//'roger'表示信息收到的意思..
ch <- "roger"
}
}(ch)

//模擬客戶端一次請(qǐng)求
ch <- "hello,服務(wù)端!"
select {
case ack := <-ch:
fmt.Println(ack)
case <-time.After(time.Second):
fmt.Println("返回超時(shí)...")

}

分析

  1. 服務(wù)端需要持續(xù)服務(wù),因此采用for無(wú)限循環(huán)形式
  2. 客戶端的返回值就是和超時(shí)進(jìn)行速度PK。
責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2023-03-10 07:46:55

Go開發(fā)Channelselect

2020-12-27 10:15:44

Go語(yǔ)言channel管道

2023-05-29 09:25:38

GolangSelect

2023-07-13 08:06:05

應(yīng)用協(xié)程阻塞

2021-10-09 19:05:06

channelGo原理

2021-10-11 11:58:41

Channel原理recvq

2024-09-06 10:48:13

2021-06-09 09:06:52

Go語(yǔ)言算法

2021-02-06 18:19:54

TimeGo語(yǔ)言

2021-09-01 18:38:59

Goselectdefault

2023-07-27 13:46:10

go開源項(xiàng)目

2020-11-23 08:54:14

Go語(yǔ)言結(jié)構(gòu)體

2020-11-30 06:17:03

Go語(yǔ)言

2020-12-02 08:45:36

Go語(yǔ)言

2020-11-26 06:40:24

Go語(yǔ)言基礎(chǔ)

2019-12-10 13:55:10

Go指針存儲(chǔ)

2025-07-14 06:10:00

Go編程代碼

2023-11-03 18:03:54

Web應(yīng)用Python

2024-06-19 10:08:34

GoChannel工具

2022-02-22 08:55:29

SelectPoll/ Epoll
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)