
muduo
春泥面包
这个作者很懒,什么都没留下…
展开
-
muduo : Thread
预备知识__thread (Thread-Local Storage) https://gcc.gnu.org/onlinedocs/gcc-3.3.1/gcc/Thread-Local.html Thread-local storage (TLS) is a mechanism by which variables are allocated such that there is o原创 2016-07-22 16:06:29 · 1912 阅读 · 2 评论 -
muduo : TcpConnection
引用前面学习了TcpServer的实现,TcpServer对每个连接都会新建一个TcpConnection(使用shared_ptr管理)。接下来学习一下TcpConnection的设计细节。连接状态muduo对于一个连接的从生到死进行了状态的定义,类似一个状态机。enum States { kDisconnected, kConnecting, kConnected, kDisconnecting原创 2016-08-11 16:17:04 · 1232 阅读 · 1 评论 -
muduo : TcpConnection's Write Buffer
引言前面的文章分别分析到了三个半事件中的连接建立、连接断开、数据读入,这里分析最后半个事件,即发送数据。muduo作者将该事件称为是半个事件是有道理的,因为这里的发送是指将数据放到TCP协议栈的发送缓冲区,由TCP协议栈负责将数据发送到对端,因此称为半个事件。发送数据发送数据比接收数据更难,因为发送数据是主动的,接收读取数据是被动的。因为muduo采用的是LT模式,因为合适注册writeable事件原创 2016-08-12 11:49:58 · 655 阅读 · 0 评论 -
muduo : TcpConnection's Read Buffer
引言这篇文章分析一下TcpConnection对输入的处理,异步非阻塞网络库是需要输入/输入缓冲区的,这点muduo的作者陈硕在书中7.4.2节已经说的很清楚了。对于输入的处理是三个半事件中的又一个重要事件。TcpConnection::handleReadvoid TcpConnection::handleRead(Timestamp receiveTime){ loop_->assertI原创 2016-08-12 10:33:47 · 571 阅读 · 0 评论 -
muduo : Reactor(EventLoop Poller Channel)
Linux多线程服务器编程 6.4.1 TCP网络编程最本质的是处理三个半事件: 1. 连接的建立, 包括server accept新连接,客户端成功connect.TCP连接一旦建立,server和client的地位是相等的,可以各自收发数据. 2. 连接的断开,包括主动断开(close,shutdown)和被动断开(read返回0) 3. 消息到达,文件描述符可读.(对该原创 2016-08-10 11:36:38 · 1238 阅读 · 1 评论 -
muduo : TcpServer
引言上篇博文学习了Acceptor class 的实现,它仅仅是对Channel和Socket的简单封装,对使用者来说简单易用。这得益于底层架构Reactor。接下来,开始学习muduo对于建立连接的处理。这属于muduo提到的三个半事件中的第一个。可以想想一下,TcpServer class应该也是对Acceptor,Poller的封装。连接处理过程首先TcpServer通过Acceptor向Po原创 2016-08-11 14:32:50 · 771 阅读 · 0 评论 -
muduo : Acceptor
引言Acceptor用于接受(accept)客户端的连接,通过设置回调函数通知使用者。它只在muduo网络库内部的TcpServer使用,由TcpServer控制它的生命期。实际上,Acceptor只是对Channel的封装,通过Channel关注listenfd的readable可读事件,并设置好回调函数就可以了。因此理解了上一节的muduo:Reactor,那么Acceptor也比较容易理解。成原创 2016-08-11 10:40:39 · 619 阅读 · 0 评论 -
muduo : Timer
Timer成员变量 private: const TimerCallback callback_; // 回调函数 Timestamp expiration_; // 过期时间 const double interval_; const bool repeat_; // 是否重复 const int64_t sequence_;原创 2016-08-02 11:17:53 · 1056 阅读 · 0 评论 -
muduo : StringPiece
http://www.zhihu.com/question/34499426/answer/58891014 为什么要有这个类? C++里面有string和char*,如果你用const string &s 做函数形参,可以同时兼容两种字符串。但当你传入一个很长的char * 时,会生成一个较大的string对象,开销比较大。 如果你的目的仅仅是读取字符串的值,用这个StringP原创 2016-07-20 16:02:05 · 2058 阅读 · 0 评论 -
muduo : Thread-safe Singleton
使用pthread_once#include <boost/noncopyable.hpp>#include <pthread.h>template<typename T>class Singleton : private boost::noncopyable {public: static T& instance() { pthread_once(&ponce_原创 2016-07-28 11:57:39 · 964 阅读 · 0 评论 -
muduo : ThreadPool
https://github.com/chenshuo/muduo/blob/master/muduo/base/ThreadPool.h https://github.com/chenshuo/muduo/blob/master/muduo/base/ThreadPool.cc线程池用到了前面分析的Thread、MutexLock、Condition成员变量 private: mu原创 2016-07-26 16:54:50 · 713 阅读 · 0 评论 -
muduo : Condition
https://github.com/chenshuo/muduo/blob/master/muduo/base/Condition.h前面分析了互斥锁MutexLock的实现,这里分析一下条件变量Condition的实现。条件变量需要一个互斥锁来保护。成员变量 MutexLock& mutex_; pthread_cond_t pcond_;mutex_是个引用型变量,用来保护条件变量pc原创 2016-07-25 14:30:23 · 1135 阅读 · 0 评论 -
muduo : AtomicInteger
https://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Atomic-Builtins.html http://blog.youkuaiyun.com/huntinux/article/details/51994877上面这篇文章学习了Linux下的无锁原子操作,使用的是gcc的built-in函数:// 先获取变量值再改变它type __sync_fetch_a原创 2016-07-24 14:33:39 · 908 阅读 · 0 评论 -
muduo : MutexLock
介绍 https://github.com/chenshuo/muduo/blob/master/muduo/base/Mutex.hMutexLock是对互斥锁的封装,使用时用作一个类的成员变量,保护另一个常用被互斥访问。成员变量 pthread_mutex_t mutex_; pid_t holder_; // 由哪个线程持有default构造函数: MutexLock()原创 2016-07-25 14:02:47 · 1207 阅读 · 2 评论