简短结论:backlog 和并发有关,但它不是“并发能力”本身,而是“连接排队/等待被 accept 的连接数”相关的一个参数。
下面分层说明(以 Linux 网络编程中最常见的 listen(fd, backlog) 为例)。
在 TCP 服务端:
listen(sockfd, backlog);
backlog 表示:已完成三次握手、但还没有被应用层 accept() 取走的连接,在内核里能排多少。
更准确地说(不同内核版本有差异):
SYN_RECV 状态ESTABLISHED 但未被 acceptbacklog 主要影响全连接队列长度(以及历史上是两者之和)。
accept() 处理慢:
并发处理速度 ≈ accept速度 + 业务处理速度
backlog 只是“缓冲”,不是“处理能力”accept() 很慢,连接还是会堆积在 Linux 2.2+ / 2.4+ 以后:
listen() 的 backlog 会被内核限制:实际队列长度 = min(backlog, /proc/sys/net/core/somaxconn)
somaxconn = 128 或 4096(取决于发行版)所以:
# 查看
cat /proc/sys/net/core/somaxconn
# 修改
sysctl -w net.core.somaxconn=65535
❌ 误解:
backlog 越大,并发越高
✅ 正确:
backlog 越大,抗瞬时连接风暴能力越强,但并发上限由:
决定。
listen(fd, 1024);
并配合:net.core.somaxconn = 65535
accept如果你愿意,可以告诉我:
我可以给你更具体的 backlog 设置建议。