Muduo-Base-Atomic】的更多相关文章

原子性操作可以做到比互斥锁更小的开销,在多线程编程中原子性操作是非常有用的.Atomic.h文件位于muduo/base下,代码如下: // Use of this source code is governed by a BSD-style license // that can be found in the License file. // // Author: Shuo Chen (chenshuo at chenshuo dot com) //原子性操作:比锁的开销更小 #ifndef…
muduo库里面的线程类是使用基于对象的编程思想,源码目录为muduo/base,如下所示: 线程类头文件: // Use of this source code is governed by a BSD-style license // that can be found in the License file. // // Author: Shuo Chen (chenshuo at chenshuo dot com) //线程类 #ifndef MUDUO_BASE_THREAD_H #d…
一.Timestamp类  1.类图如下: 2.  知识点 (1)     这个类继承了 muduo::copyable, 以及 boost::less_than_comparable. (2)     boost::less_than_comparable 这个类要求实现 <, 可以自动实现 >, <=, >= (自动推导出来的,模板元的思想) 3. 学习流程(1) 剥离代码 (在 ~/muduo_practice 下), 编译出来一个只有TimeStamp的base库(2) 小…
传统的Reactor通过控制select和poll的等待时间来实现定时,而现在在Linux中有了timerfd,我们可以用和处理IO事件相同的方式来处理定时,代码的一致性更好. 一.为什么选择timerfd 常见的定时函数有如下几种: sleep alarm usleep nanosleep clock_nanosleep getitimer / setitimer timer_create / timer_settime / timer_gettime / timer_delete timer…
Connector TcpClient Connector Connector用来发起连接. 在非堵塞网络中,主动发起连接比被动接收连接更为复杂,由于要考虑错误处理,还要考虑重试. 主要难点在于 1.socket是一次性的,一旦出错无法恢复.仅仅能关闭重来.使用新的fd后,用新的channel. 2.错误代码与acce(2)不同. 及时是socket可写.也不意味着已经成功建立连接.还须要用getsockopt(sockfd, SOL_SOCKET, SO_ERROR, --)再次确认. 3.重…
muduo库的简单使用 muduo是一个基于事件驱动的非阻塞网络库,采用C++和Boost库编写. 它的使用方法很简单,参考这篇文章:TCP网络编程本质论 里面有这么几句: 我认为,TCP 网络编程最本质的是处理三个半事件: 连接的建立,包括服务端接受 (accept) 新连接和客户端成功发起 (connect) 连接. 连接的断开,包括主动断开 (close 或 shutdown) 和被动断开 (read 返回 0). 消息到达,文件描述符可读.这是最为重要的一个事件,对它的处理方式决定了网络…
陈硕 (giantchen_AT_gmail)Blog.csdn.net/Solstice Muduo 全系列文章列表: http://blog.csdn.net/Solstice/category/779646.aspx我将会写一系列文章,介绍用 muduo 网络库完成常见的 TCP 网络编程任务.目前计划如下: UNP 中的简单协议,包括 echo.daytime.time.discard 等. Boost.Asio 中的示例,包括 timer2~6.chat 等. Java Netty 中…
一.MutexLock 类 class  MutexLock  :  boost::noncopyable 二.MutexLockGuard类 class  MutexLockGuard  :  boost::noncopyable 三.Condition类 class  Condition  :  boost::noncopyable 某个线程: 加锁                                          while (条件)           wait(); /…
总结说的有的过大,算是对自己学习的一个总结.兴许会不断补充. 模型总结 muduo是基于非堵塞的IO和事件驱动的网络库. muduo的总体结构时one loop per thread+threadpool,图例如以下: mainReactor和subReactor都是EventLoop,在mainReactor中接收连接.把建立后的连接分发到subReactor中. 作者開始在muduo/base中封装了和网络无关的一些操作.如日志.时间.队列.相互排斥量.条件变量.线程.线程池等.给后面网络库…
muduo库里面的实现日志滚动有两种条件,一种是日志文件大小达到预设值,另一种是时间到达超过当天.滚动日志类的文件是LogFile.cc ,LogFile.h 代码如下: LogFile.cc #include <muduo/base/LogFile.h> #include <muduo/base/Logging.h> // strerror_tl #include <muduo/base/ProcessInfo.h> #include <assert.h>…