![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
muduo_base源码分析笔记
文章平均质量分 63
muduo_base解析
wenxingxingxing
这个作者很懒,什么都没留下…
展开
-
muduo_base库源码分析(八):ThreadPool剖析
我们知道线程池本质就是一个生产者消费者模型,它维护一个线程队列和任务队列。一旦任务队列当中有任务,相当于生产者生产了东西,就唤醒线程队列中的线程来执行这些任务。那么,这些线程就相当于消费者线程。 muduo库的线程数目属于启动时配置,当线程池启动时,线程数目就已经固定下来 先上代码,然后分析: ThreadPool.h #ifndef MUDUO_BASE_THREADPOOL_H #define MUDUO_BASE_THREADPOOL_H #include <muduo/base/Con原创 2021-06-08 21:50:41 · 91 阅读 · 0 评论 -
muduo_base库源码分析(三):原子性:为什么需要原子性操作 ,Atomic.h代码分析 ,原子性操作可以实现无锁队列 ,muduo的编译选项 ,Types.h的研究
文章目录为什么需要原子操作Atomic.h代码分析原子性操作可以实现无锁队列Type.h的研究 为什么需要原子操作 最最典型的例子:x++ 我们知道它有三个步骤,1.从内存中读x的值到寄存器中 2.对寄存器加1 3.再把新值写回x所处的内存地址 假设x的初始值为0,我们使用两个线程对x++,我们期待x的值为3,但实际上可能为2。 原因是有可能多个处理器同时从各自的缓存中读取变量i,分别进行加一操作,然后分别写入系统内存当中。那么想要保证读改写共享变量的操作是原子的,就必须保证CP原创 2021-06-07 21:58:13 · 128 阅读 · 0 评论 -
muduo_base库的Timestamp类剖析(二)
Timestamp.h的研究 Timestamp.h的类图如下,参考下即可 Timestamp中用了一个BOOST_STATIC_ASSERT宏,这是编译时断言,而我们平时用的assert是运行时断言 #include <iostream> #include <boost/static_assert.hpp> class Timestamp { private: int64_t microSecondsSinceEpoch_; }; BOOST_STATIC_A原创 2021-06-07 21:41:51 · 79 阅读 · 0 评论 -
muduo_base源码解析(1):poll epoll
poll && epollpollpoll函数原型poll使用流程epollepoll函数原型epoll LTepoll ET poll poll函数原型 函数原型 #include <poll.h> int poll(struct pollfd *fds, nfds_t nfds, int timeout); 参数: fds:结构体指针,可以把结构体数组的首地址传递进来;fds是输入输出参数,一旦这些事件中的一个或多个发生了,就会返回回来,所以可以根据poll返回回来的事件来原创 2021-06-06 22:56:58 · 76 阅读 · 0 评论