Mudo C++网络库第八章学习笔记
muduo网络库的设计与实现
- muduo是基于Reactor模式的C++网络库;
Reactor的关键结构
- Reactor最核心的是事件分发机制, 即将IO multiplexing拿到IO事件分发给各个文件描述符(fd)的事件处理函数;
- 每个Channel对象自始至终只负责一个文件描述符(fd)的IO事件分发, 但它并不拥有这个fd, 也不会在析构的时候关闭这个fd;
TimerQueue定时器
- 用timerfd给EventLoop加上定时器功能(和处理IO事件相同的方式来处理定时), 这样的代码一致性更好;
TCP No Delay 和 TCP keepalive
- TCP No Delay 和 TCP keepalive都是常用的TCP选项, 前者的作用是禁用Nagle算法, 避免连续发包出现延迟, 这对编写低延迟网络服务很重要;
- TCP keepalive的作用是定期检查TCP连接是否还存在;
- 如果有应用层心跳的话, TCP keepalive不是必需的;
高水位回调和低水位回调
- muduo使用HighWaterMarkCallback和WriteComleteCallback;
- muduo库的event loop pool由EventLoopThreadPool类表示;
- muduo库的TcpClient具备TcpConnection断开之后重新连接的功能, 加上Connector具有反复尝试连接的功能, 因此客户端和服务器的启动顺序无关紧要;
epoll
- epoll是Linux独有的高效的IO multiplexing机制, 它与poll的不同是:
- poll每次返回整个文件描述符数组, 用户要遍历数组以找到那些文件描述符上有IO事件;
- 而epoll_wait返回的是活动fd的列表, 需要遍历的数组通常会小得多;
- 在并发连接数较大而活跃连接比例不高时, epoll比poll更高效;
Mudo C++网络库第八章学习笔记的更多相关文章
- Mudo C++网络库第二章学习笔记
线程同步的精要 并发有两种基本的模型: 一种是message passing(消息传递); 另一种是shared memory(共享内存); 在分布式系统中(有多台物理机需要通信), 运行在多台机器上 ...
- Mudo C++网络库第十章学习笔记
C++编译链接精要 C++语言的三大约束: 与C兼容, 零开销(zero overhead)原则, 值语义; 兼容C语言的编译模型与运行模型, 也就是锁能直接使用C语言的头文件和库; 头文件包含具有传 ...
- Spring实战第八章学习笔记————使用Spring Web Flow
Spring实战第八章学习笔记----使用Spring Web Flow Spring Web Flow是一个Web框架,它适用于元素按规定流程运行的程序. 其实我们可以使用任何WEB框架写流程化的应 ...
- Mudo C++网络库第六章学习笔记
muduo网络库简介 高级语言(Java, Python等)的Sockects库并没有对Sockects API提供更高层的封装, 直接用它编写程序很容易掉到陷阱中: 网络库的价值还在于能方便地处理并 ...
- Mudo C++网络库第十一章学习笔记
反思C++面向对象与虚函数 C++语言学习可以看<C++ Primer>这本书; 在C++中进行面向对象编程会遇到其他语言中不存在的问题, 其本质原因是C++ class是值语义, 而非对 ...
- Mudo C++网络库第四章学习笔记
C++多线程系统编程精要 学习多线程编程面临的最大思维方式的转变有两点: 当前线程可能被切换出去, 或者说被抢占(preempt)了; 多线程程序中事件的发生顺序不再有全局统一的先后关系; 当线程被切 ...
- Mudo C++网络库第三章学习笔记
多线程服务器的适用场合与常用编程模型 进程间通信与线程同步; 以最简单规范的方式开发功能正确.线程安全的多线程程序; 多线程服务器是指运行在linux操作系统上的独占式网络应用程序; 不考虑分布式存储 ...
- muduo网络库源码学习————Timestamp.cc
今天开始学习陈硕先生的muduo网络库,moduo网络库得到很多好评,陈硕先生自己也说核心代码不超过5000行,所以我觉得有必要拿过来好好学习下,学习的时候在源码上面添加一些自己的注释,方便日后理解, ...
- Mudo C++网络库第七章学习笔记
muduo编程示例 muduo库是设计来开发内网的网络程序, 它没有做任何安全方面的加强措施, 如果在公网上可能会受到攻击; muduo库把主动关闭连接这件事分成两步来做: 如果主动关闭连接, 会先关 ...
随机推荐
- 042、用volume container 共享数据 (2019-03-05 周二)
参考https://www.cnblogs.com/CloudMan6/p/7188479.html volume container 是专门为其他容器提供 volume 的容器,他提供的卷也可以 ...
- Mac 开发使用中的小技巧收集
1. mac 下ssh连接到 linux 服务器管理,同putty,无需第三方 Mac 下打开终端,输入: ssh 登录用户名@ip地址 如: ssh root@142.138.1.89 如有询问是否 ...
- C# Math.Round实现中国式四舍五入
decimal sum = 11111.334; sum = , MidpointRounding.AwayFromZero); sum:11111.33decimal sum = 11111.34 ...
- json中带有\r\n处理
后台代码把换行符\r\n替换为\\r\\n,前台代码js收到的字符就是\r\n
- 大规模数据导入和导出(oracle)
请期待... http://www.cnblogs.com/xwdreamer/archive/2012/06/08/2541678.html Oracle sqlldr的用法 (这个最完整) htt ...
- Spring 快速开始 Profile 和 Bean
和maven profile类似,Spring bean definition profile 有两个组件:声明和激活. [栗子:开发测试环境使用HyperSQL 生产环境使用JNDI上下文根据配置查 ...
- [C++]环状序列(CircularSequence,ACM/ICPC Seoul 2004,UVa1584)
Question 例题3-5 环状序列(CircularSequence,ACM/ICPC Seoul 2004,UVa1584) 长度为n的环状串有n种表示方法,分别为从某个位置开始顺时针得到,在这 ...
- MLE
独立同分布的采样x1,x2,…,xn,θ为模型参数,f为我们所使用的模型.参数为θ的模型f产生上述采样可表示为 f(x1,x2,…,xn|θ)=πf(xi|θ) 已知的为x1,x2,…,xn,未知为θ ...
- linux全部替换命令学习
:%s/准备替换内容/新内容/g 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符 :%s#vivian/#sky/#g 替换 vivian/ 为 sky/ :%s+/oradata/ap ...
- 【Thymeleaf】常用属性
参考链接 Thymeleaf 常用属性