linux网络编程
patientcat
这个作者很懒,什么都没留下…
展开
-
有关于epollout事件触发的实验&epoll坑
epollout事件触发机制 & epoll坑 文章目录epollout事件触发机制 & epoll坑epoll机制实验服务器端客户端验证开始验证一:epoll底层红黑树只允许插入单个key结论验证二:EPOLLOUT的触发时机LTET 在网上看了很多关于epollout事件触发的文章,说的有点千奇百怪。一头雾水。之前自己做的实验也无法验证,一直没有思路,昨天晚上看epoll原理图...原创 2019-03-21 12:11:23 · 3489 阅读 · 2 评论 -
minimuduo库01——singsing库介绍
singsing 这算做是学习muduo后的一个小总结吧。这个库的完善基本代表着我自己对muduo库的理解逐渐加深。 介绍 需要你有如下概念 线程池 function/bind实现回调函数 熟悉Reactor或者读过我的关于Reactor的文章。 同muduo一样,我也是将库中的文件大概分为了两类base库和net库。其中base库放的都是一些比如时间类的基础。net库则是放的一些有关网络的东...原创 2019-06-26 22:22:58 · 303 阅读 · 0 评论 -
使用C++实现简单Reactor
Reactor 介绍 有了c语言实现的基础,使用c++来写Reactor就非常容易了。 首先介绍的就是Reactor的三大组件。 handler demultiplexer reactor handler handler负责抽象事件。 设置fd 设置关注的事件类型 设置回调函数 等基本事件。 reactor reactor负责将handler注册到demultiplexer上。 demul...原创 2019-06-26 21:35:13 · 2371 阅读 · 1 评论 -
C语言实现简单的Reactor
Reactor 介绍 Reactor模式网上有很多讲解,我这里不想过多介绍。其核心共有三个。 抽象的事件 事件多路分发器 一个Reactor用来管理整个流程 reactor by c Reactor是我们从代码中抽取出来方便我们进行管理的。但这里我们完全不去管它。很暴力地使用面向过程的思想去做。 抽象的事件——直接被我们具体化为fd 事件多路分发器——直接被我们具体化为epoll 代码思路...原创 2019-06-26 20:30:17 · 2525 阅读 · 1 评论 -
minimuduo库04补充——TcpConnection的断开
TcpConnection的断开 TcpConnection的断开涉及生存期的管理。如果有兴趣,强烈建议去看看的陈硕的《linux网络编程》 当客户端有消息到来时 当客户端有消息发送过来时,此时我们收到read的返回值后。假设对端断开,我们收到n=0。此时我们不能直接将handler或者TcpConnection删除。 因为我们此时仍然处于handler和TcpConnection对象的调用栈中...原创 2019-07-01 22:18:34 · 137 阅读 · 0 评论 -
minimuduo库04——TcpConnection
TcpConnection 这个类就是用来帮助我们管理连接的。 在最开始之前,仅仅凭照之前的一些使用经验,想想需要哪些东西。 connfd。这个会被我们抽象成一个Handler。 应用层缓冲区。为什么需要应用层缓冲区?——请查看muduo手册《Muduo Manual》中关于应用层缓冲区的设定。 收和接 我们希望当connHandler就绪的时候,自动去回调我们设置给它的回调函数——handl...原创 2019-07-01 21:44:47 · 182 阅读 · 0 评论 -
minimuduo库03——TcpServer
TcpServer 仔细想了想自己之前在写server端的时候,发现从listenfd的初始化直到收到新的连接之前,一直都是重复的工作。因此可以抽象出一个Acceptor出来。 没有Acceptor 先看没有Acceptor的情况。 我们在TcpServer中完成listenfd的初始化,一直到给Handler设置回调函数。 大致的伪代码如下 TcpServer{ int lfd = initLi...原创 2019-07-01 20:47:14 · 175 阅读 · 0 评论 -
线程池4cpp
线程池 思想 线程池的核心思想相对于one TcpConnection per thread来说。有如下优点。 频繁创建和消耗线程开销很大,如果业务很短,开销比创建线程还小,那么就得不偿失。线程池采用固定大小的线程数,减少了这部分消耗。 大并发会导致起非常多的线程,从而吃光内存。 多线程并非很多线程就很好。实际上和CPU的核心数有关。 API class ThreadPool { public...原创 2019-06-05 12:11:55 · 177 阅读 · 0 评论 -
时间精度引发的一个问题
时间精度引发的一个问题 文章目录时间精度引发的一个问题问题描述1. 原因2. 结论 问题描述 最近在muduo库-LogFile类中遇到这么一个问题。 测试程序如下 std::unique_ptr<muduo::LogFile> g_logFile; void outputFunc(const char* msg, int len) { g_logFile->append(...原创 2019-04-03 20:11:39 · 241 阅读 · 0 评论 -
ET模式下EPOLLIN和EPOLLOUT同时返回
EPOLLIN和EPOLLOUT同时返回 问题 ET模式下 这是自己实验时,发生的一个现象,同时注册EPOLLIN和EPOLLOUT事件,当读事件就绪时,返回的flag带有EPOLLIN和EPOLLOUT。 矛盾 对于我们来说,判断读事件和写事件就绪的条件是reported后的flag。现在ET模式下。当读事件由低电平到高电平时,读事件就绪,可以理解。但写事件由高电平还是高电平,却触发。那么就会导...原创 2019-03-21 16:44:42 · 1212 阅读 · 0 评论 -
minimuduo库02——ReactorThreadPool
网络模型 在之前的一些作品中,我已经介绍了三种网络模型。分别为 each TcpConnection per thread threadPool single-thread Reactor 现在这个库的网络模型将采用multi-Reactor + threadPool这个模型。也是Reactor模式的成熟模型。 我们将拥有一个ReactorThreadPool这么一个类。其功能就是启动num...原创 2019-06-26 23:13:04 · 377 阅读 · 0 评论