- 博客(8)
- 资源 (1)
- 收藏
- 关注
原创 <<Effective C++>>读书笔记
谨以此书作为现代C++程序设计的基石没有阅读和模板有关的章节,将已经是常识的概念没有记录使用const enum inline替换#define,便于调试。因为使用#define定义的变量不进入符号表。尽可能在所有的地方使用const重载二元运算符时,防止出现无聊的赋值行为。const Blas& operator+(const Blas& lhs,const Blas& rhs);if(a*
2017-05-18 16:58:36
253
原创 浅析muduo库中的定时器设施
一个设计良好的定时器在服务端的应用程序上至关重要,muduo定时器的实现陈硕大牛在书中已经详细的谈过,笔者尝试从源码的角度解读定时器的实现,如果理解不对,欢迎指正。在muduo的定时器系统中,一共由四个类:Timestamp,Timer,TimeId,TimerQueue组成。其中最关键的是Timer和TimerQueue两个类。此文只解释初读时让人非常迷惑的TimerQueue类,这个类是整个定时
2017-05-04 15:19:05
1680
1
原创 现代C++的回调技术--使用std::bind和std::function
最近在读完陈硕大牛的《Linux多线程服务端编程》以及muduo源码后,对其中的一些实现细节有着十分深刻的印象,尤其是使用std::bind和std::function的回调技术。可以说,这两个大杀器简直就是现代C++的“任督二脉”,甚至可以解决继承时的虚函数指代不清的问题。在此详细叙述使用std::bind和std::function在C++对象之间的用法,用以配合解决事件驱动的编程模型。
2017-03-12 17:08:25
5097
1
原创 muduo中的TcpServer一次完整的工作(下)
模拟单线程情况下muduo库的工作情况在上篇中,笔者追踪了Connetfd(连接套接字)和Listenfd(监听套接字)的Channel对象加入到loop循环的过程。其中包括了网络连接过程中,muduo会创建的对象。本文将会追踪Connetfd(连接套接字)和Listenfd(监听套接字)从loop循环退出并且销毁,一直到main函数终止的过程。
2017-03-08 15:25:38
526
原创 muduo中的TcpServer一次完整的工作(上)
模拟单线程情况下muduo库的工作情况muduo的源代码对于一个初学者来说还是有一些复杂的,其中有很多的回调函数以及交叉的组件,下面我将追踪一次TCP连接过程中发生的事情,不会出现用户态的源码,都是库内部的运行机制。下文笔者将描述一次连接发生的过程,将Channel到加入到loop循环为止。监听套接字加入loop循环的完整过程
2017-03-08 15:24:22
1402
原创 浅析muduo库中的线程设施03
最后,向大家介绍muduo库中对于线程池的封装的理解。最重要的想法就是线程池将线程看为自己可执行的最小并且可随时增加的单位。整个线程池对象维持两个任务队列,threads_表示目前正在运行中的线程池,queue_表示位于存储队列中的等待线程。thread_在运行的过程中使用while循环+条件变量判断当前的活动线程池中是否有空位,以及新的等待线程进入线程池。线程池从一开始就确定了自己将要运行
2017-02-19 11:10:01
414
原创 浅析muduo库中的线程设施02
接下来,聊一聊主题–Thread/***Thread.h***/class Thread : boost::noncopyable //禁止拷贝{ public: typedef boost::function<void ()> ThreadFunc;//仿函数对象,利用回调的方式使用线程函数 explicit Thread(const ThreadFunc&, const stri
2017-02-19 11:04:06
272
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人