最近又把muduo网络库仔细研究了一遍,收获良多。本文将对muduo中的设计思想以及关键的技术细节进行总结和分析,当然由于篇幅的原因这里更多的是对关键技术的简略提及,具体细节还需要读者自己去查找学习资料。
muduo/base
- Date类
- 日期类的封装,使用Julian(儒略日)可以方便的计算日期差。具体公式和思想见 儒略日的计算
- Exception类
- 异常类的封装,对外提供what()输出错误信息和stacktrace()函数进行栈追踪,使用时需要
throw muduo::Exception("oops");,外部使用catch (const muduo::Exception& ex)捕获并使用ex.what()/stackTrace()获取详细信息。
- 异常类的封装,对外提供what()输出错误信息和stacktrace()函数进行栈追踪,使用时需要
- Atomic类
- 原子性操作比锁的开销小,所以我们可以使用gcc提供的自增自减原子操作;最小的执行单元是汇编语句,不是语言语句。
- CountDownLatch类
- 既可用于所有子线程等待主线程发起“起跑”,也可用于主线程等待子线程初始化完毕才开始工作。其中使用RAII技法封装MutextLockGuard,hodler表示锁属于哪一个线程。
- TimeStamp类
- TimeStamp 继承至
less_than_comparable<>,使用模板元编程,只需要实现<,可自动实现>,<=,>=。
- TimeStamp 继承至
BlockingQueue
- BlockingQueue和BoundedBlockingQueue分别是无界有界队列,本质上是生产者消费者问题,使用信号量或者条件变量解决。ThreadPool的本质也是生产者消费者问题,任务队列中是任务函数(生产者),线程队列就相当于消费者。基本流程如下图:

本文详细总结了Muduo网络库的设计思想和关键技术,包括Date类、Exception类、Atomic类、CountDownLatch、TimeStamp、BlockingQueue、异步日志类、reactor模式、TcpConnection、TimerQueue、Buffer类等。通过对Muduo的源码分析,揭示了其在网络编程中的高效实现和优化策略。
最低0.47元/天 解锁文章
7932

被折叠的 条评论
为什么被折叠?



