timers: reuse Timeout objects in setStreamTimeout · nodejs/node@086741d · GitHub
Skip to content

Commit 086741d

Browse files
mcollinarichardlau
authored andcommitted
timers: reuse Timeout objects in setStreamTimeout
Rearm the stream's existing Timeout object instead of allocating a new Timeout and a bound callback on every setTimeout() call. The HTTP server disarms and rearms the keep-alive timeout twice per request, so this saves two allocations and the associated async resource churn on every request over a keep-alive connection. The async resource is re-initialized on reuse, so async_hooks observes the same init/destroy sequence as before. A microbenchmark of the setTimeout(msecs)/setTimeout(0) cycle improves by 2.2x (205.9ns to 92.8ns), and benchmark/http/simple.js (type=buffer len=1024 chunks=1 chunkedEnc=0 c=50) improves by 3.70% (t=2.15, 40 samples per binary with server and load generator pinned to disjoint CPU sets). Assisted-by: Claude Fable 5 (Claude Code) Signed-off-by: Matteo Collina <hello@matteocollina.com> PR-URL: #64254 Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Minwoo Jung <nodecorelab@gmail.com>
1 parent efbbb9a commit 086741d

2 files changed

Lines changed: 40 additions & 2 deletions

File tree

lib/internal/stream_base_commons.js

Lines changed: 9 additions & 2 deletions

lib/internal/timers.js

Lines changed: 31 additions & 0 deletions

0 commit comments

Comments
 (0)