# 并发数优化说明

## 并发数的含义

**并发数（Semaphore(3)）** 是指：**单个账户扫描时，同时分析多少个交易对**

### 举例说明

假设扫描250个交易对，初步筛选后需要详细分析50个交易对：

**并发数3**：
- 同时最多分析3个交易对（获取K线、计算技术指标）
- 其他47个交易对排队等待
- 分析完3个后，继续分析下3个，以此类推

**并发数5**：
- 同时最多分析5个交易对
- 其他45个交易对排队等待
- 分析完5个后，继续分析下5个，以此类推

### 不是指用户进程数

- **用户进程数**：每个账户有1个进程（这是固定的）
- **并发数**：单个账户扫描时，同时分析多少个交易对（这是可以调整的）

---

## 为什么要降低并发数

### 多用户场景

如果4个账户同时扫描：

**并发数3**：
- 账户1：同时分析3个交易对
- 账户2：同时分析3个交易对
- 账户3：同时分析3个交易对
- 账户4：同时分析3个交易对
- **总共最多12个并发请求**

**并发数5**：
- 账户1：同时分析5个交易对
- 账户2：同时分析5个交易对
- 账户3：同时分析5个交易对
- 账户4：同时分析5个交易对
- **总共最多20个并发请求**

**结论**：降低并发数可以减少系统总压力

---

## 单用户场景

如果只有一个账户：

**并发数3**：
- 扫描耗时：约20-30秒（较慢）

**并发数5**：
- 扫描耗时：约15-25秒（较快）

**结论**：如果只有一个账户，保持并发数5可以提升扫描速度

---

## 建议

### 当前情况

如果你现在只有一个账户，建议：

1. **保持并发数5**：提升单个账户的扫描速度
2. **如果后续增加用户**：再降低到3，确保系统稳定

### 如何调整

**文件**：`trading_system/market_scanner.py`

**位置**：第107行

```python
# 当前（多用户优化）
semaphore = asyncio.Semaphore(3)  # 最多3个并发请求

# 单用户建议
semaphore = asyncio.Semaphore(5)  # 最多5个并发请求
```

---

## 性能对比

### 单用户场景

| 并发数 | 扫描耗时 | 系统压力 |
|--------|----------|----------|
| 3      | 20-30秒  | 低       |
| 5      | 15-25秒  | 低       |

### 多用户场景（4个账户）

| 并发数 | 总并发请求 | 系统压力 |
|--------|------------|----------|
| 3      | 最多12个    | 中等     |
| 5      | 最多20个    | 较高     |

---

## 总结

1. **并发数**：单个账户扫描时，同时分析多少个交易对
2. **不是用户进程数**：每个账户仍然只有1个进程
3. **单用户建议**：保持并发数5，提升扫描速度
4. **多用户建议**：降低到3，确保系统稳定
