perf(http3): 移除 ctxPool sync.Pool 提升性能
基准测试显示 sync.Pool 反而降低性能: - 有池:574 ns/op ~ 704 ns/op - 无池:263 ns/op ~ 264 ns/op 移除池化逻辑,直接创建 RequestCtx 对象。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
9f04b92a75
commit
0e3ce8cf52
@ -14,7 +14,6 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"sync"
|
|
||||||
|
|
||||||
"github.com/valyala/fasthttp"
|
"github.com/valyala/fasthttp"
|
||||||
)
|
)
|
||||||
@ -24,19 +23,11 @@ import (
|
|||||||
// 由于 quic-go 使用标准库的 http.Handler 接口,
|
// 由于 quic-go 使用标准库的 http.Handler 接口,
|
||||||
// 而 lolly 使用 fasthttp,需要通过适配层进行转换。
|
// 而 lolly 使用 fasthttp,需要通过适配层进行转换。
|
||||||
type Adapter struct {
|
type Adapter struct {
|
||||||
// ctxPool 用于复用 RequestCtx 对象
|
|
||||||
ctxPool sync.Pool
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewAdapter 创建新的适配器。
|
// NewAdapter 创建新的适配器。
|
||||||
func NewAdapter() *Adapter {
|
func NewAdapter() *Adapter {
|
||||||
return &Adapter{
|
return &Adapter{}
|
||||||
ctxPool: sync.Pool{
|
|
||||||
New: func() interface{} {
|
|
||||||
return &fasthttp.RequestCtx{}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wrap 包装 fasthttp handler 为 http.Handler。
|
// Wrap 包装 fasthttp handler 为 http.Handler。
|
||||||
@ -51,12 +42,8 @@ func NewAdapter() *Adapter {
|
|||||||
// - http.Handler: 标准库兼容的 HTTP 处理器
|
// - http.Handler: 标准库兼容的 HTTP 处理器
|
||||||
func (a *Adapter) Wrap(handler fasthttp.RequestHandler) http.Handler {
|
func (a *Adapter) Wrap(handler fasthttp.RequestHandler) http.Handler {
|
||||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
// 从池中获取 RequestCtx
|
// 直接创建 RequestCtx
|
||||||
ctx, ok := a.ctxPool.Get().(*fasthttp.RequestCtx)
|
ctx := &fasthttp.RequestCtx{}
|
||||||
if !ok {
|
|
||||||
ctx = &fasthttp.RequestCtx{}
|
|
||||||
}
|
|
||||||
defer a.ctxPool.Put(ctx)
|
|
||||||
|
|
||||||
// 初始化 ctx(fasthttp 的 RequestCtx 需要 Init 方法)
|
// 初始化 ctx(fasthttp 的 RequestCtx 需要 Init 方法)
|
||||||
ctx.Init(&fasthttp.Request{}, nil, nil)
|
ctx.Init(&fasthttp.Request{}, nil, nil)
|
||||||
|
|||||||
@ -26,13 +26,6 @@ func TestNewAdapter(t *testing.T) {
|
|||||||
if adapter == nil {
|
if adapter == nil {
|
||||||
t.Fatal("Expected non-nil adapter")
|
t.Fatal("Expected non-nil adapter")
|
||||||
}
|
}
|
||||||
|
|
||||||
// 测试 ctxPool 是否初始化
|
|
||||||
ctx := adapter.ctxPool.Get().(*fasthttp.RequestCtx)
|
|
||||||
if ctx == nil {
|
|
||||||
t.Error("Expected non-nil RequestCtx from pool")
|
|
||||||
}
|
|
||||||
adapter.ctxPool.Put(ctx)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestWrap 测试 Wrap 函数基本功能
|
// TestWrap 测试 Wrap 函数基本功能
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user