![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
网络编程相关
网络编程
xupeng1644
道阻且长,行则将至!
展开
-
IOCP完整例子
本文是我在学习IOCP的时候,第一次写一个完整的例子出来,当然了,参考了CSDN上一些朋友的博客,大部分都是按照他们的思路写的,毕竟我是初学者,参考现成的学起来比较快。当然了,真正用到项目中的IOCP肯定不止这么简单的,还有内存池,环形缓冲区,socket连接池等高端内容,后面我会参考一些例子,写出一个完整的给大家看。/************************************************************************FileName:iocp.hAutho转载 2020-05-21 19:45:03 · 1626 阅读 · 0 评论 -
IOCP小结
一. IOCP完成端口I/O模型当应用程序必须一次管理多个套接字时,完成端口模型提供了最好的系统性能。这个模型也提供了最好的伸缩性,它非常适合用来处理上百上千个套接字。IOCP模型是事先开好了N个线程,存储在线程池中,让他们hold。然后将所有用户的请求都投递到一个完成端口上,然后N个工作线程逐一地从完成端口中取得用户消息并加以处理。这样就避免了为每个用户开一个线程。既减少了线程资源,又提高了线程的利用率。1. 什么时候完成端口(completion port)对象I/O完成端口是应用程序使用线程转载 2020-05-20 23:00:49 · 1365 阅读 · 0 评论 -
主从reactor模式
muduo中,类EventLoopThreadPool的构造函数将成员numThreads_设置为0,表示默认不开启主从reactor模式。通过在调用void TcpServer::start()之前,调用EventLoopThreadPool::setThreadNum()。即可开启主从reactor模式。类TcpServer的结构如下:class TcpServer : noncopyable{public: ...private: EventLoop* loop_; // the a原创 2020-05-12 12:53:01 · 1835 阅读 · 0 评论 -
one loop per thread
muduo中,one loop per thread,即为一个线程中一个loop循环。这个线程是EventLoopThread对象, 这个循环就是其EventLoop成员对象调用的loop()循环,由这个循环来进行等待事件就绪并分发到各自的事件处理函数。EventLoopThread对象由线程池EventLoopThreadPool管理,每个EventLoopThread对象都有一个EventLoop的loop运行其中。调用void EventLoopThreadPool::start(const T原创 2020-05-08 23:05:39 · 3472 阅读 · 0 评论 -
使用timerfd实现定时器功能
依旧以muduo为例。使用timerfd可以使用与socketfd类型相同的方式在IO复用中使用,使用timerfd_create()创建一个timerfd,接着使用timerfd_settime()设置定时器的到期时间。我们只需要注册timerfd的可读事件,当定时器超时时,timerfd变成可读,调用其设置的可读的回调函数。来看下TimerQueue.hTimerQueue类定义c...原创 2020-05-07 15:51:49 · 2786 阅读 · 2 评论 -
使用eventfd唤醒阻塞在select、poll、epoll的IO复用
还是以muduo为例:EventLoop中有两个成员变量与唤醒阻塞的IO复用有关,wakeupFd_与wakeupChannel_;class EventLoop : noncopyable{public: ... void wakeup(); ...private: ... void handleRead(); // waked upprivate: int wak...原创 2020-05-06 19:55:55 · 2564 阅读 · 0 评论 -
监听套接字是非阻塞的,accept()返回的连接套接字是否也是阻塞的?
以muduo为例,在类Acceptor中,监听套接字acceptSocket_在初始化时调用socket::createNonblockingOrDie(), 它的实现如下:int sockets::createNonblockingOrDie(sa_family_t family){#if VALGRIND int sockfd = ::socket(family, SOCK_STREA...原创 2020-05-06 09:11:00 · 2196 阅读 · 0 评论 -
libevent eventbuffer读写水位思考
libevent eventbuffer读写水位思考原创 2020-04-24 16:05:57 · 2105 阅读 · 0 评论 -
libevent 编程疑难解答
转载请注明出处:http://blog.csdn.net/luotuo44/article/details/39547391前段时间阅读了libevent的源码。读毕,之前使用libevent时的一些疑问都已经豁然开朗了。对于libevent源码的分析,可以移步http://blog.csdn.net/luotuo44/article/category/2435521查看。如果是libevent...转载 2020-04-23 22:29:47 · 1667 阅读 · 0 评论 -
libevent的水平触发与边缘触发
libevent默认是水平触发,也即是如果有数据可读,读回调将被触发。如果数据没有读完,读回调将会持续触发,直至无数据可读。但是,这里其实也分为两种情况:基于套接字的event和基于套接字的bufferevent。基于套接字的event:#include <WinSock2.h>#include <event2/event.h>#include <event...原创 2020-04-23 20:46:03 · 3047 阅读 · 0 评论 -
libevent源码深度剖析-张亮
一 序幕1 前言Libevent是一个轻量级的开源高性能网络库,使用者众多,研究者更甚,相关文章也不少。写这一系列文章的用意在于,一则分享心得;二则对libevent代码和设计思想做系统的、更深层次的分析,写出来,也可供后来者参考。附带一句:Libevent是用c语言编写的(MS大牛们都偏爱c语言哪),而且几乎是无处不函数指针,学习其源代码也需要相当的c语言基础。2 Libevent简介...转载 2020-04-13 15:49:05 · 4856 阅读 · 2 评论 -
libevent参考手册 系列文章
英文原文出处:Fast portable non-blocking network programming with Libevent使用libevent的快速可移植非阻塞网络编程:异步IO简介 转载:翻译:使用Libevent的快速可移植非阻塞网络编程:异步IO简介libevent参考手册:前言 转载:翻译:Libevent参考手册:前言libevent参考手册第一章:设置li...转载 2020-04-20 21:31:53 · 1423 阅读 · 0 评论 -
libevent源码分析系列
Libevent源码分析Libevent-2.0.22-stable详细剖析原创 2020-04-21 18:26:48 · 1351 阅读 · 0 评论 -
VS2015 编译libevent库
文章目录下载 Libevent编译 Libevent 库Visual Studio配置Libevent使用 Libevent参考链接下载 Libevent官网地址:http://libevent.org/编译 Libevent 库1 解压libevent-2.1.11-stable.tar.gz2 打开开始菜单,找到Vistual Studio 本机工具命令提示符3 cd进入解压后...转载 2020-04-23 15:39:11 · 2240 阅读 · 0 评论