我这里有这段 Golang 代码
package main
import (
"fmt"
"time"
)
func main() {
burstyLimiter := make(chan time.Time, 3)
for i := 1; i <= 3; i++ {
burstyLimiter <- time.Now()
}
go func() {
for t := range time.Tick(200 * time.Millisecond) {
burstyLimiter <- t
}
}()
burstyRequests := make(chan int, 5)
for i := 1; i <= 5; i++ {
burstyRequests <- i
}
for r := range burstyRequests {
fmt.Println("received request", r, time.Now())
}
}
那我这里还有一个稍微修改过的版本
package main
import (
"fmt"
"time"
)
func main() {
burstyRequests := make(chan int, 5)
for i := 1; i <= 5; i++ {
burstyRequests <- i
}
for r := range burstyRequests {
fmt.Println("received request", r, time.Now())
}
}
对于永远阻塞的那个,我的假设是由于时间的行为。Tick 可能导致泄漏和通道上的范围阻塞,只要有可能写入通道。
我想得到帮助,以明确我对这种情况的理解是否正确。