Skip to content

并发与池 ​

🏊 浏览器复用与并发控制。

浏览器是昂贵资源,snir 提供多层复用机制。

为什么需要复用

每起一个 Chrome 进程约占 ~150MB 内存。批量场景下若每任务起停一次浏览器,几十并发就会吃满机器。复用是 snir 性能的核心。

复用层次 ​

层次机制范围
进程内DriverPool同进程多任务
进程内单例共享池(Shared*)同进程全局
跨进程snir provider多进程共享 Chrome

进程内:DriverPool ​

DriverPool 管理一批 Driver,任务借还复用:

--threads(CLI)/ maxConcurrent(SDK)控制并发度。

共享池单例 ​

SDK Shared* 函数用进程内全局共享池,多任务自动复用:

go
sdk.SharedCapture(url, opts)  // 自动用共享池

见 共享池、共享池单例。

跨进程:Provider ​

bash
snir provider --max-concurrent 20
# worker
snir scan ... --wss ws://...

见 provider、远程 Chrome。

API 并发限流 ​

HTTP API 用 ConcurrencyLimiter:

  • --max-concurrent:同时执行数
  • --queue-size:排队容量

见 并发限流。

池统计 ​

  • SharedPoolStats():SDK 共享池统计
  • GET /stats:API 并发统计
  • PoolStats:DriverPool 统计

空闲超时 ​

SharedSetIdleTimeout(d) 设浏览器空闲多久后关闭,节省资源。

并发数选择 ​

机器建议 --threads
🖥️ 4 核5-10
🖥️ 8 核10-20
🖥️ 服务器20-50

并发不是越高越好

过多会触发目标限流或耗尽内存。从 5-10 起步,观察目标响应与机器负载再调。见 性能调优。

池中一个 Driver 从空闲到回收的生命周期:

下一步 ​

基于 MIT 许可发布