perf: 去除 buffer.Unbounded 不必要的构造函数和 nil 字段
This commit is contained in:
parent
6bd987fce5
commit
7111350022
|
@ -9,15 +9,8 @@ import (
|
||||||
//
|
//
|
||||||
// 该缓冲区来源于 gRPC 的实现,用于在不使用额外 goroutine 的情况下实现无界缓冲区
|
// 该缓冲区来源于 gRPC 的实现,用于在不使用额外 goroutine 的情况下实现无界缓冲区
|
||||||
// - 该缓冲区的所有方法都是线程安全的,除了用于同步的互斥锁外,不会阻塞任何东西
|
// - 该缓冲区的所有方法都是线程安全的,除了用于同步的互斥锁外,不会阻塞任何东西
|
||||||
func NewUnbounded[V any](generateNil func() V) *Unbounded[V] {
|
func NewUnbounded[V any]() *Unbounded[V] {
|
||||||
return &Unbounded[V]{c: make(chan V, 1), nil: generateNil()}
|
return &Unbounded[V]{c: make(chan V, 1)}
|
||||||
}
|
|
||||||
|
|
||||||
// NewUnboundedN 与 NewUnbounded 相同,只是省略了 generateNil 参数
|
|
||||||
func NewUnboundedN[V any]() *Unbounded[V] {
|
|
||||||
return NewUnbounded[V](func() (v V) {
|
|
||||||
return v
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unbounded 是无界缓冲区的实现
|
// Unbounded 是无界缓冲区的实现
|
||||||
|
@ -26,7 +19,6 @@ type Unbounded[V any] struct {
|
||||||
closed bool
|
closed bool
|
||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
backlog []V
|
backlog []V
|
||||||
nil V
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Put 将数据放入缓冲区
|
// Put 将数据放入缓冲区
|
||||||
|
@ -57,7 +49,6 @@ func (slf *Unbounded[V]) Load() {
|
||||||
if len(slf.backlog) > 0 {
|
if len(slf.backlog) > 0 {
|
||||||
select {
|
select {
|
||||||
case slf.c <- slf.backlog[0]:
|
case slf.c <- slf.backlog[0]:
|
||||||
slf.backlog[0] = slf.nil
|
|
||||||
slf.backlog = slf.backlog[1:]
|
slf.backlog = slf.backlog[1:]
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue