更新内容: - 编写《并发控制》详细文档,说明任务并发限制的配置、使用和最佳实践。 - 完成《并发控制实现总结》文档,记录设计决策和开发细节。 - 添加《并发控制快速参考》文档,提供配置和常见问题的快速解决方案。
103 lines
1.8 KiB
Markdown
103 lines
1.8 KiB
Markdown
# 并发控制快速参考
|
||
|
||
## 配置
|
||
|
||
```bash
|
||
# 设置最大并发数(默认 10)
|
||
export MAX_CONCURRENT_JOBS=20
|
||
```
|
||
|
||
## API
|
||
|
||
### 查询并发状态
|
||
|
||
```bash
|
||
GET /jobs/concurrency/status
|
||
```
|
||
|
||
**响应:**
|
||
```json
|
||
{
|
||
"max_concurrent": 10, // 最大并发数
|
||
"available_slots": 7, // 可用槽位
|
||
"running_jobs": 3 // 运行中任务数
|
||
}
|
||
```
|
||
|
||
## 代码示例
|
||
|
||
### 在 JobManager 中使用
|
||
|
||
```python
|
||
# 并发控制自动生效,无需额外代码
|
||
job_manager = await get_job_manager()
|
||
job_id = await job_manager.create_job(...)
|
||
|
||
# 任务会自动排队,等待可用槽位
|
||
asyncio.create_task(job_manager.execute_job(job_id))
|
||
```
|
||
|
||
### 查询并发状态
|
||
|
||
```python
|
||
job_manager = await get_job_manager()
|
||
status = job_manager.get_concurrency_status()
|
||
|
||
print(f"运行中: {status['running_jobs']}/{status['max_concurrent']}")
|
||
print(f"可用槽位: {status['available_slots']}")
|
||
```
|
||
|
||
## 监控
|
||
|
||
### 实时监控
|
||
|
||
```bash
|
||
# 持续监控并发状态
|
||
watch -n 1 'curl -s http://localhost:8000/jobs/concurrency/status | jq'
|
||
```
|
||
|
||
### 测试脚本
|
||
|
||
```bash
|
||
# 运行并发控制测试
|
||
./scripts/test_concurrency.sh
|
||
```
|
||
|
||
## 推荐配置
|
||
|
||
| 任务类型 | 推荐并发数 |
|
||
|---------|-----------|
|
||
| CPU 密集型 | 核心数 × 1.5 |
|
||
| I/O 密集型 | 核心数 × 5-10 |
|
||
| 混合型 | 核心数 × 2-3 |
|
||
|
||
## 故障排查
|
||
|
||
### 任务一直 pending
|
||
|
||
```bash
|
||
# 检查并发状态
|
||
curl http://localhost:8000/jobs/concurrency/status
|
||
|
||
# 如果 available_slots = 0,说明所有槽位被占用
|
||
# 解决方案:
|
||
# 1. 等待当前任务完成
|
||
# 2. 增加并发限制
|
||
# 3. 优化算法性能
|
||
```
|
||
|
||
### 系统资源耗尽
|
||
|
||
```bash
|
||
# 降低并发限制
|
||
export MAX_CONCURRENT_JOBS=5
|
||
|
||
# 重启服务
|
||
./scripts/run_dev.sh
|
||
```
|
||
|
||
## 相关文档
|
||
|
||
- [详细文档](./concurrency-control.md)
|
||
- [实现总结](./concurrency-control-changelog.md)
|