# 功能更新：自定义并发数量 (1-6)

## 📋 更新说明

**用户需求**：希望并发数量可以自定义，支持1-6个并发。

**更新内容**：
- ✅ 并发数从固定5个改为可自定义1-6个
- ✅ 添加滑块UI控件，直观调整并发数
- ✅ 实时保存到localStorage，刷新后保持设置
- ✅ 显示当前并发数标签

---

## 🎯 功能特点

### 1. 灵活可调
```
1个并发: 逐个执行，适合网络不稳定或服务器压力大的情况
2个并发: 保守执行，降低风险
3个并发: 平衡速度和稳定性
4个并发: 较快速度
5个并发: 默认推荐，平衡最佳 ⭐
6个并发: 最快速度，适合网络好且服务器稳定的情况
```

### 2. 实时调整
- ✅ 滑块拖动即可调整
- ✅ 显示刻度标记（1-6）
- ✅ 实时保存配置
- ✅ 下次执行自动应用

### 3. 智能限制
- ✅ 执行中禁止修改（避免冲突）
- ✅ 范围限制1-6（防止设置不合理的值）
- ✅ 显示当前并发数标签

---

## 🎨 UI界面

### 批量任务面板
```
╔═════════════════════════════════════════════╗
║  批量自动化任务        并发数: 5             ║
╠═════════════════════════════════════════════╣
║  选择任务模板:          并发数量:            ║
║  [完整套餐 ▼]          1 - ●----- 6         ║
║                        ↑ 滑块控件            ║
╚═════════════════════════════════════════════╝
```

### 并发数显示
- 右上角标签：`并发数: 5` (绿色徽章)
- 滑块下方实时显示当前值
- 拖动滑块立即更新

---

## 🔧 修改的文件

### 1. 核心Store
**文件**: `src/stores/batchTaskStore.js`

**修改内容**:
```javascript
// 从固定值改为从localStorage读取
const maxConcurrency = ref(
  parseInt(localStorage.getItem('maxConcurrency') || '5')
)

// 新增设置方法
const setMaxConcurrency = (count) => {
  if (count < 1 || count > 6) {
    console.warn('⚠️ 并发数必须在1-6之间')
    return
  }
  maxConcurrency.value = count
  localStorage.setItem('maxConcurrency', count.toString())
  console.log(`⚙️ 并发数已设置为: ${count}`)
}
```

### 2. UI组件
**文件**: `src/components/BatchTaskPanel.vue`

**新增UI**:
- 并发数标签显示
- 滑块控件（NSlider）
- 刻度标记（1-6）
- 修改提示消息

---

## 🚀 使用方法

### 方法1：通过滑块调整
1. 打开Token管理页面 (`/tokens`)
2. 在批量任务面板找到"并发数量"滑块
3. 拖动滑块到想要的数值（1-6）
4. 自动保存，立即生效

### 方法2：通过代码设置
```javascript
// 在浏览器控制台
import { useBatchTaskStore } from '@/stores/batchTaskStore'
const batchStore = useBatchTaskStore()

// 设置并发数为3
batchStore.setMaxConcurrency(3)

// 查看当前并发数
console.log(batchStore.maxConcurrency) // 输出: 3
```

---

## 📊 不同并发数的对比

### 性能对比（10个Token，每个4个任务）

| 并发数 | 预计耗时 | 服务器压力 | 推荐场景 |
|--------|---------|-----------|---------|
| 1 | ~40秒 | 最低 ⭐ | 网络不稳定、服务器敏感 |
| 2 | ~20秒 | 低 | 保守执行 |
| 3 | ~14秒 | 中低 | 一般稳定网络 |
| 4 | ~10秒 | 中 | 较好网络环境 |
| 5 | ~8秒 | 中高 ⭐ | 默认推荐 |
| 6 | ~7秒 | 高 | 网络极佳、服务器稳定 |

**计算公式**:
```
理论耗时 = (Token数 ÷ 并发数) × 单Token耗时
实际耗时 = 理论耗时 + 网络延迟 + 任务间隔
```

---

## 💡 使用建议

### 推荐配置

#### 场景1：网络不稳定
```
并发数: 1-2
原因: 减少网络拥堵，提高成功率
适用: 移动网络、公共WiFi
```

#### 场景2：服务器高峰期
```
并发数: 2-3
原因: 降低服务器压力，避免被限流
适用: 游戏更新后、活动期间
```

#### 场景3：日常使用
```
并发数: 5 ⭐ (默认)
原因: 平衡速度和稳定性
适用: 大部分情况
```

#### 场景4：深夜/凌晨
```
并发数: 6
原因: 服务器压力小，可以最快速度执行
适用: 凌晨定时任务
```

### 动态调整策略
```javascript
// 根据时间动态调整
早高峰 (7-9点):   并发数 2-3
工作日白天:       并发数 3-4
晚高峰 (18-21点): 并发数 2-3
深夜 (23-6点):    并发数 5-6
周末全天:         并发数 4-5
```

---

## 🔍 执行日志示例

### 并发数为1
```
🚀 开始批量执行任务
📋 Token数量: 5
📋 任务列表: 4个任务
⚙️ 并发数: 1

🎯 开始执行 Token: 主号战士
✅ Token完成: 主号战士
🔌 断开WebSocket连接: 主号战士

🎯 开始执行 Token: 小号法师
✅ Token完成: 小号法师
🔌 断开WebSocket连接: 小号法师

...（逐个执行）
```

### 并发数为5
```
🚀 开始批量执行任务
📋 Token数量: 5
📋 任务列表: 4个任务
⚙️ 并发数: 5

🎯 开始执行 Token: 主号战士
🎯 开始执行 Token: 小号法师
🎯 开始执行 Token: 练级号
🎯 开始执行 Token: 打金号
🎯 开始执行 Token: 测试号

✅ Token完成: 主号战士
✅ Token完成: 小号法师
✅ Token完成: 练级号
✅ Token完成: 打金号
✅ Token完成: 测试号

...（5个同时执行）
```

---

## ⚙️ 技术细节

### localStorage存储
```javascript
// 存储键
localStorage.setItem('maxConcurrency', '5')

// 读取（默认5）
parseInt(localStorage.getItem('maxConcurrency') || '5')
```

### 响应式更新
```javascript
// maxConcurrency是响应式ref
const maxConcurrency = ref(5)

// UI滑块绑定
v-model:value="batchStore.maxConcurrency"

// 实时更新
@update:value="handleConcurrencyChange"
```

### 并发控制逻辑
```javascript
// 填充执行队列（最多maxConcurrency个）
while (executing.length < maxConcurrency.value && queue.length > 0) {
  const tokenId = queue.shift()
  const promise = executeTokenTasks(tokenId, tasks)
  executing.push(promise)
}

// 等待至少一个完成
if (executing.length > 0) {
  await Promise.race(executing)
}
```

---

## 🎯 实际应用示例

### 示例1：快速测试（1个并发）
```
场景: 测试新功能是否正常
设置: 并发数 = 1
时长: 较慢，但便于观察每个Token的执行情况
```

### 示例2：日常任务（5个并发）
```
场景: 每天早晨执行日常任务
设置: 并发数 = 5（默认）
时长: 10个Token约16秒
```

### 示例3：深夜定时（6个并发）
```
场景: 凌晨3点定时执行完整套餐
设置: 并发数 = 6（最快）
时长: 10个Token约14秒
```

### 示例4：网络差（2个并发）
```
场景: 移动网络4G环境
设置: 并发数 = 2
时长: 较慢，但成功率更高
```

---

## ⚠️ 注意事项

### 1. 执行中不可修改
- 批量任务执行中，滑块会被禁用
- 需要等待当前批次完成后才能修改
- 避免执行过程中改变并发策略导致混乱

### 2. 合理设置
- 并发数越大，服务器压力越大
- 可能触发服务器的限流机制
- 建议根据实际情况调整

### 3. 网络环境
- 网络不稳定时建议降低并发数
- 延迟高的网络适合1-3并发
- 本地网络可以使用5-6并发

### 4. Token数量
- Token数量少于并发数时，实际并发 = Token数
- 例如：3个Token，并发设为5，实际只有3个同时执行

---

## 📈 性能监控

### 查看实际并发情况
```javascript
// 浏览器控制台
import { useBatchTaskStore } from '@/stores/batchTaskStore'
const batchStore = useBatchTaskStore()

// 查看当前并发数设置
console.log('设置并发数:', batchStore.maxConcurrency)

// 查看实际执行中的Token数
console.log('执行中Token:', batchStore.executingTokens.size)

// 查看执行统计
console.log('执行统计:', batchStore.executionStats)
```

---

## 🎉 总结

本次更新让并发数量变得**灵活可控**：

### 核心特性
- ✅ **自定义范围**: 1-6个并发任意选择
- ✅ **滑块UI**: 直观易用的调整界面
- ✅ **持久化**: 自动保存，下次打开仍然生效
- ✅ **智能限制**: 执行中禁止修改，防止冲突

### 实用价值
- ✅ **灵活调整**: 根据网络和服务器情况动态调整
- ✅ **优化速度**: 网络好时提高并发，加快执行
- ✅ **提高稳定性**: 网络差时降低并发，提升成功率
- ✅ **个性化**: 每个用户可以根据自己的需求设置

**现在你可以完全掌控批量任务的执行速度了！** 🚀

---

## 📚 相关文档
- `批量任务使用说明.md` - 完整使用教程
- `批量任务功能实现总结.md` - 技术实现详解
- `优化-自动断开连接.md` - 连接管理优化

