ev-drogon-thread-hardware-concurrency-003¶
| 字段 | 值 |
|---|---|
| 项目 | drogonframework/drogon |
| 固定 commit | 3aae769cc405 |
| 路径 | orm_lib/src/DbClientImpl.cc |
| 行段 | L66-L71 |
| 特性 | std::thread |
| 许可证 | MIT |
| 代码来源 | 项目源码 |
| 级别 | manual |
| 审核 | zyuhao7 @ 2026-11-03 |
| 测试代码 | 否 |
| 发现方式 | manual |
用法¶
用 std::thread::hardware_concurrency 限制数据库事件循环的线程数
为什么典型¶
数据库连接数超过硬件线程数不会带来收益;用 hardware_concurrency 取上限,再与用户请求的连接数取较小值,是线程池定容的常见做法。
摘录¶
loops_(type == ClientType::Sqlite3
? 1
: (connNum < std::thread::hardware_concurrency()
? connNum
: std::thread::hardware_concurrency()),
"DbLoop")
备注¶
生产代码;SQLite 固定单线程,其他数据库按连接数与 hardware_concurrency 的较小值创建事件循环。hardware_concurrency 允许返回 0,调用方仍需处理。