Golang利用select實現超時機制

2022-03-23 00:08:14 字數 591 閱讀 6060

所謂超時,比如上網瀏覽一些安全的**,如果幾分鐘之後不做操作,那麼就會讓你重新登入。

就所謂有時候出現goroutine阻塞的情況,那麼我們如何避免整個程式進入阻塞情況,這時候就可以用select來設定超時

package main

import (

"fmt""

time")

func main()

}}()

//別忘了()

for i := 0; i < 5; i++

<-quit //

這裡暫時阻塞,直到可讀

fmt.println("

程式結束")

}

//

這裡注意觀察列印過程

num = 0

num = 1

num = 2

num = 3

num = 4

超時程式結束

補充**

//

防止讀取超時

select //

防止寫入超時

select

select的列子說明select內部實現原理

1 select內部是個陣列,而epoll內部結構是紅黑二叉樹 2 select查詢起來慢,而epoll查詢起來快 3 每次迴圈,內部都要發生拷貝 檢視相關 而epoll不需要這樣的操作,也就是初始化一次拷貝 include include include include include int m...

Golang併發模型 select高階

最近公司工作有點多,golang的select高階就這樣被拖沓啦,今天堅持把時間擠一擠,把吹的牛皮補上。前一篇文章 golang併發模型 輕鬆入門select 介紹了select的作用和它的基本用法,這次介紹它的3個高階特性。nil的通道永遠阻塞 如何跳出for selectselect 阻塞 當c...

golang開發 select多路選擇

select 是 golang 中的乙個控制結構,語法上類似於switch 語句,只不過select是用於 goroutine 間通訊的 每個 case 必須是乙個通訊操作,要麼是傳送要麼是接收,select 會隨機執行乙個可執行的 case。如果沒有 case 可執行,goroutine 將阻塞,...