go / intermediate
Snippet
Ratenbegrenzung gleichzeitiger Operationen mit time.Ticker
In Go kann eine Ratenbegrenzung mithilfe von time.Ticker implementiert werden. Ein Ticker sendet in regelmäßigen Abständen ein Signal über seinen Kanal C. Indem wir vor der Verarbeitung jeder Anfrage aus ticker.C lesen, blockieren wir die Schleife bis zum nächsten Takt. Dies stellt sicher, dass Anfragen in einer gleichmäßigen, kontrollierten Geschwindigkeit verarbeitet werden, ohne nachgelagerte Dienste zu überlasten.
snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package mainimport ("fmt""time")func processRequests(requests <-chan int, rate time.Duration) {ticker := time.NewTicker(rate)defer ticker.Stop()for req := range requests {<-ticker.Cfmt.Printf("Processed request %d at %s\n", req, time.Now().Format("15:04:05"))}}
Erklärung
1
ticker := time.NewTicker(rate)
Erstellt einen neuen Ticker, der Kanalsignale im angegebenen Zeitintervall liefert.
2
defer ticker.Stop()
Stellt sicher, dass die Ticker-Ressourcen beim Verlassen der Funktion freigegeben werden, um Ressourcenlecks zu vermeiden.
3
<-ticker.C
Blockiert die Ausführungsschleife, bis ein Takt vom Ticker-Kanal empfangen wird, wodurch die Verzögerung erzwungen wird.