qidao123.com技术社区-IT企服评测·应用市场
标题:
【从零实现JsonRpc框架#3】线程模型与性能优化
[打印本页]
作者:
勿忘初心做自己
时间:
2025-5-11 17:50
标题:
【从零实现JsonRpc框架#3】线程模型与性能优化
1.
Muduo 的线程模型
Muduo 基于
Reactor 模式
,采用
单线程 Reactor
和
多线程 Reactor
相结合的方式,通过事件驱动和线程池实现高并发。
1.
单线程模型
焦颔首脑
:所有 I/O 操作(accept、read、write)和业务逻辑均在一个线程中完成。
适用场景
:低并发、低耽误的简单场景(如代理服务器)。
优点
:
无锁,避免线程间同步开销。
逻辑简单,调试方便。
缺点
:
无法充分利用多核 CPU。
单个长耗时任务会阻塞整个事件循环。
2.
多线程模型(主从 Reactor)
Muduo 默认利用
主从 Reactor 模型
,分为
Acceptor 线程
和
I/O 线程池
:
主 Reactor(Acceptor 线程)
:
负责监听端口(accept 新连接)。
将新连接分发给子 Reactor(I/O 线程池)。
子 Reactor(I/O 线程池)
:
每个子 Reactor 对应一个 EventLoop 线程。
负责处理已连接套接字的 I/O 事件(读写)。
业务逻辑(如消息处理)默认在子 Reactor 线程中执行。
示例代码
:
muduo::net::EventLoop loop;
muduo::net::TcpServer server(&loop, listenAddr, "EchoServer");
server.setThreadNum(4); // 设置 4 个 I/O 线程
server.start();
loop.loop();
复制代码
3.
线程池与任务分发
线程池范例
:
I/O 线程池
:处理网络 I/O 事件(默认由 TcpServer 管理)。
计算线程池
:将耗时业务逻辑提交到独立线程池,避免阻塞 I/O 线程。
关键接口
:
EventLoop::runInLoop():将任务提交到当前线程的事件循环。
EventLoop::queueInLoop():将任务异步提交到事件循环队列。
2.性能优化策略
1.
淘汰线程上下文切换
优化方法
:
避免频繁创建/销毁线程,复用线程池。
合理设置线程池大小(通常与 CPU 焦点数匹配)。
将非 I/O 任务(如计算、日志)提交到独立线程池。
示例:
// 将计算任务提交到计算线程池
loop->runInLoop(std::bind(&computeTask));
复制代码
2.
零拷贝与高效缓冲区
Muduo 的 Buffer 类
:
基于动态数组实现,主动扩容。
利用 prependable 和 readable 区域淘汰内存拷贝。
优化本领
:
避免频繁调用 retrieve(),只管批量处理数据。
直接操作 Buffer 的内存地点(如 peek())。
3.
淘汰系统调用开销
TCP_NODELAY
:关闭 Nagle 算法,降低耽误。
TcpConnection::setTcpNoDelay(true);
复制代码
SO_REUSEPORT
:允很多个进程/线程绑定同一端口(需 Linux 3.9+)。
缓冲区大小
:根据场景调整 Buffer 初始容量,淘汰扩容次数。
4.
负载平衡
连接分发策略
:
轮询(Round Robin)
:将新连接匀称分配到所有 I/O 线程(默认策略)。
一致性哈希
:根据连接特性(如 IP)固定分配到某个线程。
优化效果
:避免单线程过载,提升吞吐量。
5.
内存管理优化
对象池
:复用 TcpConnection、Buffer 等对象,淘汰内存碎片。
内存对齐
:确保数据结构对齐,提升 CPU 缓存命中率。
6.
业务逻辑优化
异步日志
:避免在 I/O 线程中同步写日志。
批量处理
:将多个小消息合并为批量操作(如数据库写入)。
协议计划
:利用二进制协议(如 Protocol Buffers)取代文本协议。
3、性能调优工具
压测工具
:
ab(Apache Bench)、wrk、tcpcopy。
性能分析
:
perf(Linux 性能分析工具)。
gprof、Valgrind(内存泄漏检测)。
监控指标
:
QPS(每秒查询数)、RTT(往返耽误)、吞吐量、错误率。
4、总结
线程模型
:主从 Reactor 模型是 Muduo 高性能的焦点,合理设置线程池大小可最大化 CPU 利用率。
优化方向
:淘汰系统调用、内存拷贝、锁竞争,结合异步非阻塞计划。
实践建议
:通过压测和性能分析工具定位瓶颈,渐渐优化。
通过上述方法,Muduo 可以轻松支持
10 万+ 并发连接
,适用于高并发、低耽误的网络服务场景(如游戏服务器、实时通信)。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/)
Powered by Discuz! X3.4