第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

“golang.org/x/time/rate”和上下文

“golang.org/x/time/rate”和上下文

Go
偶然的你 2023-01-03 11:16:46
在下面的示例中將上下文傳遞給 Wait() 函數(shù)的目的是什么?假設(shè)有一個限制器允許每秒 3 個請求。這是否意味著限制器不會成為共享資源,對于每個“進(jìn)程”函數(shù)調(diào)用,它都會有自己的限制器實例和范圍,對嗎?如果不是這樣呢?我怎樣才能實現(xiàn)它?結(jié)構(gòu)體type MyClass struct {    limiter *rate.Limiter}func NewMyClass() (*MyClass, error) {    return &MyClass{limiter: rate.NewLimiter(rate.Limit(3), 1)}, nil}func (m *MyClass) Process(ctx context.Context) error {    err := m.limiter.Wait(ctx)    if err != nil {        return err    }    //more code}例子m, _ := s3Storage.NewMyClass()        ctx1 := context.TODO()    m.Process(ctx1)    m.Process(ctx1)    m.Process(ctx1)    ctx2 := context.TODO()    m.Process(ctx2)
查看完整描述

2 回答

?
藍(lán)山帝景

TA貢獻(xiàn)1843條經(jīng)驗 獲得超7個贊

首先,您需要了解rate.Limitercontext.Context類型的不同用途。允許您控制并發(fā)進(jìn)程的Limiter執(zhí)行速率。如果Context一個進(jìn)程或一組進(jìn)程繼續(xù)下去沒有意義(例如超時、丟失連接、用戶取消...),則允許終止該進(jìn)程或一組進(jìn)程。這些是簡化,因此請閱讀 doco 以獲取更多信息。

回答你的問題:

在示例中將上下文傳遞給 Wait() 函數(shù)的目的是什么?

沒有任何目的,因為TODO上下文永遠(yuǎn)不會被取消。

這是否意味著限制器不會成為共享資源...?

不,它是共享的。你只有一個只有一個的MyClass實例Limiter。

如果沒有……我怎樣才能實現(xiàn)呢?

在每個 Process 函數(shù)調(diào)用上設(shè)置限制器是沒有意義的,因為一次調(diào)用永遠(yuǎn)不會超過 3 的限制。

認(rèn)為您想要對 進(jìn)行多組不同的限速調(diào)用Process,因此可能只需要 的多個實例MyClass,每個實例都有自己的Limiter。

我不確定你到底想做什么,但作為一個例子,速率限制器的典型用途是限制用戶或連接的進(jìn)程數(shù)。類似地,上下文可能與附加到單個連接的所有進(jìn)程相關(guān)聯(lián),因此如果連接終止,一切都可以被整齊地清除。所以一個可能的場景是你有一個Connection有 aLimiter和 a的類型Context

我希望這是有道理的。


查看完整回答
反對 回復(fù) 2023-01-03
?
慕哥6287543

TA貢獻(xiàn)1831條經(jīng)驗 獲得超10個贊

上下文定義了調(diào)用的生命周期,所以如果上下文被取消,那么 wait 調(diào)用也將被取消。例如,嘗試將上下文從 更改context.TODO()context.WithTimeout()具有非常小的超時并觀察對 Wait() 調(diào)用的影響。官方文檔很好地解釋了背后的上下文和語義context。



查看完整回答
反對 回復(fù) 2023-01-03
  • 2 回答
  • 0 關(guān)注
  • 113 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號