令牌桶全局限速器 — 让下载不抢占整个带宽
为什么需要全局限速
默认情况下,FluxDown 会把所有可用带宽榨干——对于独占带宽下载场景是好事,但如果下载同时你还要看视频、远程桌面、或者浏览器访问,就需要限速。
传统限速器有两种:
- 每个任务单独限速 — 简单但不灵活,多个任务合起来还是会吃满。
- 全局限速 + 队列调度 — 一个桶管所有任务,配合队列的并发数控制更自然。
FluxDown 采用第二种。
令牌桶的工作方式
全局限速器是一个令牌桶:
- 桶有固定容量(由用户设置的总带宽决定)。
- 令牌以固定速率补充——比如限速 5 MB/s,就是每秒放入 5 MB 令牌。
- 每个下载任务从桶里取令牌才能发出数据。
- 桶空了 = 所有任务暂停发出数据。
- 桶还有剩 = 哪个任务先来哪个先拿。
设置总限速 5 MB/s:
每秒放入 5 MB 令牌 → 所有任务共享 → 谁先取谁用
桶容量一般设为总限速 × 2 秒 = 10 MB 缓冲
和队列调度的配合
全局限速器 + 每个队列的并发数控制 = 精细化调度。常见用法:
| 场景 | 限速设置 | 队列并发 | 效果 |
|---|---|---|---|
| 独享带宽 | 不限制 | 16 | 榨干 |
| 同时看视频 | 总限速 30% | 8 | 下载占剩余 70% 以下 |
| 后台安静下载 | 夜间自动开启 | 16 (每日 22:00 起) | 白天低调、晚上全速 |
| NAS 上跑 | 总限速 20 MB/s | 4 | 不影响其他设备 |
设置入口
限速的开关与数值在「设置 → 下载 → 总带宽限制」。值为 0 表示不限速。这个设置直接作用于令牌桶的补充速率。
注意:BT 和 eD2K 协议的限速是整个客户端级别,不是任务级别——它们天然适合放全局桶里。HTTP/FTP/HLS/DASH 是任务内多线程,也从同一个桶取令牌。所有协议在一个桶里公平竞争。
为什么不是每个任务独立限速
因为 Work Stealing 需要引擎能自由地把空闲连接的带宽让给别的分段。如果每个任务自己有一个限速桶,一个任务快结束时它的桶会闲置——这部分带宽就浪费了。全局桶让任何任务随时可以吃掉其他任务释放的带宽。