muduo是目前我在学习过程中遇到的最具有学习意义的网络库,下文将分析muduo库中的基础设施 Thread和ThreadPool. 首先,介绍在多线程编程中不可缺少的同步措施 Mutex和Condition. + Mutex 有四种操作互斥锁的方式:创建,销毁,加锁,解锁。在muduo中,用一个低 ...
分类:
编程语言 时间:
2018-06-16 19:12:11
阅读次数:
188
最近在读完陈硕大牛的《Linux多线程服务端编程》以及muduo源码后,对其中的一些实现细节有着十分深刻的印象,尤其是使用std::bind和std::function的回调技术。可以说,这两个大杀器简直就是现代C++的“任督二脉”,甚至可以解决继承时的虚函数指代不清的问题。在此详细叙述使用std: ...
分类:
其他好文 时间:
2018-06-16 19:11:00
阅读次数:
196
实现一个高效的网络日志库要解决那些问题? 首先明确一下问题的模型,这是一个典型的多生产者 单消费者问题,对于前端的日志库使用者来说,应该做到非阻塞添加,作为后端的文件写入,应该注意磁盘IO的瓶颈。 功能需求 1. 日志的级别分级 2. 发生时间和具体线程信息 3. 线程安全 实现思路 多个线程共有一 ...
分类:
编程语言 时间:
2018-04-20 00:17:21
阅读次数:
256
1 设计 HttpResponse类用来,存放需要发送给客户端的数据. 这些数据是一些原始的数据.并没有合成完整的报文. 但是提供一个接口,可以填充传入的 buffer 对象,合成完整的响应报文. 2 源码 #ifndef MUDUO_NET_HTTP_HTTPRESPONSE_H #define ...
分类:
Web程序 时间:
2018-03-29 13:32:39
阅读次数:
234
1 设计 HttpRequest 类,是解析完毕的请求体所存放的地方,被关联在 HttpConnext中. 2 源码 #ifndefMUDUO_NET_HTTP_HTTPREQUEST_H #defineMUDUO_NET_HTTP_HTTPREQUEST_H #include<muduo/base ...
分类:
Web程序 时间:
2018-03-29 12:44:11
阅读次数:
213
0 设计 EventLoop 类,主要是用来管理一个进程中的channel、计时器、以及epoll 的类。 每个类只有一个,(因为如果有两个,那么一个eventloop 在loop()的时候,另一个eventloop 得不到执行)。 每一个channel或者说是每一个文件描述符都必须属于eventl ...
分类:
其他好文 时间:
2018-03-27 14:37:44
阅读次数:
178
0 设计 EpollPoller继承自Poller,为的是能够使用epoll和poll两种io函数。(这貌似是策略模式?记不清了) 1 源码 EpollPoller.h EpollPoller.cc 3 channels_ 存在的意思 epoll 没有办法保存已有的所有的在监听的文件描述符,因为ep ...
分类:
其他好文 时间:
2018-03-27 14:30:23
阅读次数:
176
Reactor模式:反应器模式,是高性能网络服务器中最为常用的一种模式,libevent,muduo,libuv等网络库都是以 Reactor模式构建。Reactor模式由同步事件多路分解器和具体事件处理程序组成,同步事件多路分解器一般都是 由操作系统支持,如支持IO复用的select,epoll, ...
分类:
其他好文 时间:
2018-02-11 14:38:34
阅读次数:
137
陈硕的《Linux多线程服务端编程:使用muduo C++网络库》中2.2一节中写了一个简单的容量无限的BlockingQueue,其中出队函数enqueue()中,每次添加元素都会调用pthread_cond_signal(封装成了Condition::notify()).然后提了一个问题,如果改 ...
分类:
编程语言 时间:
2017-11-11 17:42:33
阅读次数:
363
一、Timestamp类 1、类图如下: 2、 知识点 (1) 这个类继承了 muduo::copyable, 以及 boost::less_than_comparable. (2) boost::less_than_comparable 这个类要求实现 <, 可以自动实现 >, <=, >= (自 ...
分类:
其他好文 时间:
2017-10-29 18:48:02
阅读次数:
230