提升 Throughput(吞吐量) 的核心思路是:在相同时间内完成更多有效工作。下面从 通用原则 → 常见瓶颈 → 代码层面优化手段 → 架构层面优化 → 实战示例 系统说明。
Throughput = 单位时间处理完成的请求数 / 任务数
常见衡量方式:
QPSrecords/secmsg/secTPS优化前一定要 Profiling,否则是盲目优化。
| 类型 | 表现 |
|---|---|
| CPU | 高 CPU 使用率 |
| IO | 磁盘 / 网络等待 |
| 锁 | 线程阻塞 |
| 内存 | GC 频繁 |
| 数据库 | 慢查询 |
| 串行逻辑 | 无并发 |
✅ 原则:先解决瓶颈,再优化代码
for (task : tasks) {
process(task);
}
tasks.parallelStream().forEach(this::process);
或线程池:
ExecutorService pool = Executors.newFixedThreadPool(8);
for (Task t : tasks) {
pool.submit(() -> process(t));
}
✅ 提升点:
synchronized(this) {
// 大量逻辑
}
ConcurrentHashMap<String, Object> map = new ConcurrentHashMap<>();
✅ 实践:
synchronized 方法Lock、CAS✅ 推荐:
ThreadPoolExecutor(
corePoolSize,
maxPoolSize,
keepAliveTime,
unit,
workQueue
)
❌ 误区:
for (int i = 0; i < 100000; i++) {
String s = new String("abc");
}
String s = "abc";
✅ 好处:
for (msg : messages) {
db.insert(msg);
}
db.insertBatch(messages);
✅ 提升点:
Response r = httpClient.get(url);
CompletableFuture.supplyAsync(() -> httpClient.get(url));
✅ 常见场景:
if (cache.contains(key)) {
return cache.get(key);
}
✅ 使用:
select *请求 → MQ → 消费者
✅ 好处:
| 优化 | 效果 |
|---|---|
| 去掉 synchronized | +30% |
| 批量 DB 写入 | +200% |
| 异步日志 | +20% |
| 连接池优化 | +50% |
| 水平扩容 2 台 | +100% |
不要乱优化
✅ 推荐顺序:
Throughput 优化 = 更少等待 + 更多并行 + 更少浪费
如果你愿意,可以告诉我:
我可以给你 针对性的代码级优化方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。