「一个端口能扛多少线程」这个问题最常在启动大规模采集或批量养号前被问起,并没有通用答案。上限取决于三件事的合力:通道带宽、服务商策略,以及目标网站在并发压力下的反应。下面梳理真正决定线程数上限的因素,以及如何在任务一开始就避免撞上天花板。
并发上限取决于什么
第一个因素是服务商一侧的通道带宽。数据中心和 ISP 地址通常挂在较宽的专属通道上,能同时承载数十个连接而不明显掉速。住宅和移动流量经过真实用户或蜂窝网络,通道更窄,线程数增加时会更快遭遇延迟上升和丢包。这两类通道的差异详见移动代理与住宅代理的对比。
第二个因素是服务商自身的限制。部分套餐会在端口上设置并发连接数上限:超出部分要么被限流,要么直接被拒绝。上限写在套餐条款里,与通道质量无关,升级套餐或增加端口即可解除。
第三个、也往往是决定性的因素,是目标网站本身。它对单个 IP 单位时间内的请求数有自己的限制,通常比通道实际能承载的流量低得多。即便端口没有线程数上限,也会撞上这道天花板:网站会返回验证码、临时封禁或空响应,远早于代理通道被跑满之前。
过载的信号
过载很少表现为明确的「超出限制」错误,更多时候伪装成不稳定。第一个信号是超时增多:以前几百毫秒就能返回的请求开始卡住并中断。第二个信号是响应到达前就中断的连接比例上升,而同一网站在其他地址上运行正常。追踪这些信号的思路与如何检验代理质量一文一致。
第三个信号是同一 IP 上验证码和临时封禁比例明显上升,而请求模式没有变化。如果以前每千次请求偶尔出现一次验证码,线程数提高后变成每十次一次,这不是巧合,而是并发已同时超出网站限制和单一地址的合理上限。
为什么线程越多不代表越快
直觉上,线程数翻倍应该让采集速度翻倍,但实际曲线很快趋于平坦,随后开始下降。每一个因超时而中断的请求都不只是一次失败尝试,而是一种连锁反应:脚本要么重试,加重同一 IP 上的负载,要么丢失数据,之后不得不再单独跑一遍去补采。
一旦网站开始用验证码而非正文作答,有效处理速度下降的速度会比并发连接数增长更快:一部分线程花时间识别或绕过验证码,另一部分则拿到需要丢弃并重新请求的无效响应。最优点几乎总是低于通道的理论上限——落在错误率和重试率最小的位置,而非把整条通道占满的位置。
如何在多个端口之间分摊负载
当任务需要的并发量超过单一地址能安全承受的范围时,正确做法不是把一个端口榨到极限,而是把负载分摊到多个不同 IP 的端口上。网站会把每个地址视为独立访客,各自拥有独立的单位时间请求限制,因此十个端口各跑五个安全线程,得到的持续吞吐量会高于强行把一个端口拉到五十线程。
实际做法是先从保守的单地址线程数开始,逐步提高,记录下超时或验证码比例开始上升的那个点,然后把线程数稳定保持在明显低于该点的位置。对于按会话分配地址的住宅和移动通道,请求之间的 IP 轮换本身就能降低单个地址的负载,因为网站看到的是分散的多个 IP,而不是一个被压垮的地址——如何通过 API 配置这种轮换,见IP 轮换专题。
线程数与流量消耗的关系
线程数放大的是单位时间的流量消耗,而不只是速度。住宅和移动通道按 GB 计费,若不关闭图片、字体、自动播放等多余媒体就盲目提高并发,预算消耗速度会远快于结果增长。参考数值:一千次带图片的商品卡片检查约需 3–5 GB,一千个纯文本页面约需 1 GB;线程数扩大时这些数字线性放大,值得提前规划,而不是等余额耗尽才发现。
常见问题
有没有一个「每个端口」通用的线程数?
没有,因为上限在很大程度上由目标网站决定,而不只是通道。同一地址跑三十个并发请求对某些网站毫无压力,对另一些网站可能五个就已过载。应依据具体网站的实际表现来设定,而非套用抽象标准。
超出服务商的并发连接数限制会怎样?
通常超出限制的新连接要么被拒绝,要么部分已建立的会话被断开,具体取决于套餐规则。这不是通道质量下降,而是硬性上限,切换到更高额度的套餐或增加端口即可解除。
IP 轮换有助于维持更多并发线程吗?
有间接帮助:如果每次新请求或新会话都获得一个新地址,目标网站的限制就会按每个 IP 重新计算,而不是累积在同一个地址上。这并不能消除通道或套餐本身的上限,但能减轻针对单一地址的那部分负载压力。
按线程数和通道类型划分的最新套餐见代理专区,同页也可加购端口分摊负载,而不是把单一地址推到安全上限之上。