![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux网络编程之IOCP/epoll
文章平均质量分 95
IOCP/epoll
利白
这个作者很懒,什么都没留下…
展开
-
高性能高并发的生成唯一的Id
可以吗?int TimeWheel::GenerateTimerID(){ int x = rand() % 0xffffffff; int cur_time = time(nullptr); return x | cur_time | _timer_count;}int TimeWheel::AddTimer(int interval){ time...原创 2019-01-10 09:18:27 · 1307 阅读 · 0 评论 -
把redis源码的linux网络库提取出来,自己封装成通用库使用(★firecat推荐★)
如题,redis网络库是基于单进程单线程的机制实现,简单高效。可用直接将它提取出来使用。Redis网络库是一个单线程EPOLL模型的网络库,和Memcached使用的libevent相比,它没有那么庞大,代码一共2000多行,因此比较容易分析。本篇拿出了Redis网络部分的代码,添加了应用层buffer,让它现在变成了一个可以实现tcp通信的程序。Redis网络库是一个单线程EPOLL模型,也就是...原创 2018-02-27 17:57:28 · 945 阅读 · 0 评论 -
10w定时任务,如何高效触发超时
一、缘起很多时候,业务有定时任务或者定时超时的需求,当任务量很大时,可能需要维护大量的timer,或者进行低效的扫描。例如:58到家APP实时消息通道系统,对每个用户会维护一个APP到服务器的TCP连接,用来实时收发消息,对这个TCP连接,有这样一个需求:“如果连续30s没有请求包(例如登录,消息,keepalive包),服务端就要将这个用户的状态置为离线”。其中,单机TCP同时在线量约在10w级...转载 2018-03-07 15:11:29 · 1082 阅读 · 0 评论 -
好教程推荐系列:TCP面试常见题-张小方的知乎Live-轻松搞定技术面试中常见的网络通信问题
声明一下,文章是我自己整理的笔记,内容是张小方先生的讲稿。张先生的博客地址是http://blog.csdn.net/analogous_love张小方 的知乎 Live:轻松搞定技术面试中常见的网络通信问题https://www.zhihu.com/lives/922110858308485120?utm_source=qq&utm_medium=social本live列举的...原创 2017-12-20 10:22:53 · 9515 阅读 · 1 评论 -
epoll定时器实现系列文章:linux timerfd系列函数总结,有firecat注释
https://www.cnblogs.com/wenqiang/p/6698371.htmlfirecat注:引自muduo一书,8.2节。https://github.com/chenshuo/muduo/blob/master/backport.diff传统网络库的reactor通过控制select和poll,epoll的等待时间(epoll_wait函数的参数)来实现定时。而Linux内核...转载 2018-02-13 16:01:07 · 2608 阅读 · 0 评论 -
epoll定时器实现系列文章:linux c++ 利用timerfd和epoll封装计时器(Timer)类
http://blog.csdn.net/sumkee911/article/details/50269429程序简介:1.把timerfd和epoll的功能封装成一个类,timerfd负责创建计时器,而epoll负责等待timer超时,然后调用用户设定得回调函数。2.至于timerfd的基本功能不明白,就参考这位大神的技术文章:blog.csdn.net/chgaowei/article/det...转载 2018-02-13 16:03:28 · 1839 阅读 · 0 评论 -
epoll定时器实现系列文章:游戏后台之高效定时器-为什么选择时间轮?
http://blog.csdn.net/soft2967/article/details/9274691高性能定时器定时器的结构有多钟比如链表式,最小堆,时间轮的 在不同应用场景下使用哪种需要考虑效率和复杂度这次我么那先先讲讲时间轮定时器,在linux内核里这种结构的定时器大量使用。1.升序链表定时器 时间轮定时器1.时间轮定时器有什么好处,或者说这种结构的定时器能决解什么问题?在上面的升序...转载 2018-02-13 15:58:45 · 692 阅读 · 0 评论 -
单机服务器支持千万级并发长连接的压力测试 -- c1000k
http://blog.csdn.net/lijinqi1987/article/details/74545851https://github.com/yedf/handyhttps://github.com/ideawu/c1000k -- codehttp://www.ideawu.net/blog/ -- c1000khttp://www.ideawu.net/blo转载 2018-01-29 21:14:13 · 8554 阅读 · 1 评论 -
《Linux多线程服务端编程:使用muduo C++网络库》学习笔记,★firecat推荐★
4.9 多线程与forkfork()一般不能在多线程中调用,因为Linux的fork只克隆当前线程的thread of ctrl,不克隆其他线程。即,fork之后子进程只有一个线程,其他线程都消失了。 7.2文件传输如果客户端故意只发起连接,不接收数据,那么要么服务器进程的文件描述符耗尽,要么占用很多服务器内存,因为每个连接会建立缓冲区。解决方法是:1、限制服务器的最大并发连接...原创 2018-01-03 15:20:12 · 2953 阅读 · 0 评论 -
linux下高并发服务器实现(修改用户进程可打开文件数限制ulimit -n)
终端命令:netstat -nalp|grep 8011|wc -l #查看8011端口的客户端连接数ulimit -n 102400 #修改当前进程的最大文件数网友共享的经验值:#修改文件 /etc/sysctl.conf ,在末尾追加这些文字fs.file-max = 2097152 fs.nr_open = 2097152 net.core.s转载 2017-05-31 17:56:46 · 12249 阅读 · 0 评论 -
一套海量在线用户的移动端IM架构设计实践分享(含详细图文)
摘要: https://mp.weixin.qq.com/s?__biz=MzI1ODY0NjAwMA==&mid=2247483756&idx=1&sn=a8e3303bc573b1acaf9ef3862ef89bdd&chksm=ea044bf3dd73c2e5dcf2c10202c66d6143ec866205e9230f974fbc0b0be587926699230b6b18#rd转载 2018-01-24 16:18:04 · 16235 阅读 · 3 评论 -
Linux网络编程 使用epoll实现一个高性能TCP Echo服务器
https://my.oschina.net/u/989096/blog/1189269#零、前言 在Linux网络编程中,使用I/O复用来处理大规模并发连接是一种常见的方法,常用的有select、poll、epoll,本文主要讲述epoll的使用方法,并使用epoll实现一个高性能的Echo服务器,即把收到的数据原样返回给客户端。最后分析与select和poll的区别,并介绍一些常见问题转载 2018-01-23 14:55:53 · 993 阅读 · 0 评论 -
IO系列文章1:IO同步,异步,阻塞,非阻塞 -- 傻傻分不清楚,详情见《UNP》卷1第6章,★firecat推荐★
文章来源:http://blog.csdn.net/historyasamirror/article/details/5778378https://blog.csdn.net/yyxyong/article/details/62894064http://blog.chinaunix.net/uid-28458801-id-4464639.html"+++++++++++++++++++...转载 2017-08-21 17:33:56 · 863 阅读 · 0 评论 -
libuv中文API手册,中文教程(★firecat推荐,含C++封装库★)
http://blog.csdn.net/gx_1983/article/details/51045593 官方文档链接点我点我点我 https://github.com/luohaha/Chinese-uvbookhttp://luohaha.github.io/Chinese-uvbook/ 中文教程https://github.com/nikhilm/uvbook...转载 2017-11-27 15:33:38 · 15621 阅读 · 0 评论 -
库-libuv:概述
http://blog.csdn.net/w616589292/article/details/50920313libuv 是 Node 的新跨平台抽象层,用于抽象 Windows 的 IOCP 及 Unix 的 libev。作者打算在这个库的包含所有平台的差异性。特性: 非阻塞 TCP 套接字 非阻塞命名管道 UDP 定时器 子进程生成转载 2017-11-07 09:56:07 · 587 阅读 · 0 评论 -
网络库libevent、libev、libuv、libhv对比
http://blog.csdn.net/lijinqi1987/article/details/71214974Libevent、libev、libuv三个网络库,都是c语言实现的异步事件库Asynchronousevent library)。异步事件库本质上是提供异步事件通知(Asynchronous Event Notification,AEN)的。异步事件通知机制就是根据发生......转载 2017-11-07 09:54:40 · 11540 阅读 · 1 评论 -
收藏的博客 -- 高性能Linux/Windows服务器/C++网络库(★★★★★)
免费的跨平台SSH和SFTP工具:https://www.putty.org/-- Windowshttps://www.chiark.greenend.org.uk/~sgtatham/putty/latest.htmlhttps://www.poderosa-terminal.com/-- Windows/Machttps://filezilla-project.org/...原创 2017-08-08 14:54:12 · 4149 阅读 · 2 评论 -
muduo 网络buffer--为什么 non-blocking 网络编程中应用层 buffer 是必须的(★firecat推荐★)
文章来源:点击打开链接 对于非阻塞IO的网络库来说,buffer几乎是必须的。one loop per thread is usually a good model。event loop 是 non-blocking 网络编程的核心,在现实生活中,non-blocking 几乎总是和 IO-multiplexing 一起使用,原因有两点:没有人真的会用轮询 (busy-pool...转载 2018-06-03 11:09:50 · 923 阅读 · 0 评论 -
再次深入理解TCP网络编程中的send和recv
文章来源:点击打开链接http://blog.csdn.net/yusiguyuan/article/details/21439719http://blog.csdn.net/yusiguyuan/article/details/21390177 先明确一个概念:每个TCP socket在内核中都有一个发送缓冲区和一个接收缓冲区,TCP的全双工的工作模式以及TCP的滑动窗口便是依赖于这两个独立的b...转载 2018-06-03 11:10:45 · 4835 阅读 · 2 评论 -
什么是reactor模式?
什么是Reactor模式要回答这个问题,首先当然是求助Google或Wikipedia,其中Wikipedia上说:“The reactor design pattern is an event handling pattern for handling service requests delivered concurrently by one or more inputs. The ser...转载 2019-01-09 17:12:30 · 1642 阅读 · 0 评论 -
A机器与B机器网络connect成功后,断电时的网络状态?
如果A机器与B机器网络connect成功后从未互发过数据,此时其中一机器突然断电,则另外一台机器与断电的机器之间的网络连接处于哪种状态?笔者实测如下:虚拟机A:CentOS 7,192.168.133.131,TCP Server虚拟机B:CentOS 7,192.168.133.128,TCP Client1、建立连接时:A机器[root@localhost ~]...原创 2019-01-06 10:35:06 · 1824 阅读 · 0 评论 -
举源码实例来说明epoll之LT和ET模式的区别
一、先来看看官方的说辞 epoll 对文件的描述符的操作有两种模式 : LT(Level Trigger, 电平触发)模式 和 ET(Edge Trigger ,边沿触发)模式。LT模式是默认的工作模式,这个模式下epoll相当于一个效率较高的poll。当往epoll中内核事件表中注册EPOLLET事件时,epoll将以ET模式来操作该文件描述符。ET是epoll的高效模式。...原创 2019-01-01 10:54:54 · 1239 阅读 · 0 评论 -
详谈C++11新特性之future及开源项目ananas(folly,std c++11和ananas的future各自的区别是?)
一、前言1、最早我是从微信公众号看到这篇文章的,了解到开源项目ananas(A C++11/golang protobuf RPC framework)实现了Linux高性能网络库和rpc功能,里面的核心是重写了C++11 future的用法。微信文章的链接是:https://mp.weixin.qq.com/s/hurLTscQv0eQHXqCmtKaJQananas的作者是Bert......原创 2018-03-26 08:58:50 · 5097 阅读 · 0 评论 -
IO系列文章4:IO复用,AIO,BIO,NIO,同步,异步,阻塞和非阻塞区别
点击打开链接如果面试问到IO操作,这篇文章提到的问题,基本是必问,百度的面试官问我三个问题(1)什么是NIO(Non-blocked IO),AIO,BIO(2) java IO 与 NIO(New IO)的区别(3)select 与 epoll,poll区别我胡乱说了一气,自己边说边觉得完蛋了。果然,二面没过,很简单的问题,回来后赶紧作了总结:一、什么是socket?什么是I/O操作? 我们都知...转载 2018-06-25 15:09:02 · 456 阅读 · 0 评论 -
IO系列文章3:Unix中的IO模型:帮你弄清阻塞VS非阻塞、同步VS异步
点击打开链接对同步和异步、阻塞和非阻塞这些名词困惑了很久了,曾经相当然的认为阻塞就是同步、非阻塞就是异步,这也是典型的错误,后来从Unix网络编程卷1上才看到最全面的解析,下面主要的内容来自Unix网络编程,算是自己的一个学习笔记吧!由于这本书中面向的是Unix编程,所以在其他的环境中IO模型可能会有稍微的不同,比如Java中的IO模型,但是也不会相差很多,毕竟Unix作为众多技术的鼻祖,很多的思...转载 2018-06-25 15:07:35 · 262 阅读 · 0 评论 -
IO系列文章2:5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO、Reactor和Proactor
点击打开链接看了一些文章,发现有很多不同的理解,可能是因为大家入切的角度、环境不一样。所以,我们先说明基本的IO操作及环境。本文是在《UNIX网络编程 卷1:套接字联网API》6.2节"I/O 模型 "的基础上,即UNIX/LINUX环境下的网络 IO环境下的理解,它里面给出的例子是读取(接收)网络UDP数据。下面简单写写自己对这些IO模型的理解。1、IO IO (Input/Outp...转载 2018-06-25 15:06:11 · 364 阅读 · 0 评论 -
Linux 下定时器的实现方式分析
文章来源:点击打开链接概论定时器属于基本的基础组件,不管是用户空间的程序开发,还是内核空间的程序开发,很多时候都需要有定时器作为基础组件的支持,但使用场景的不同,对定时器的实现考虑也不尽相同,本文讨论了在 Linux 环境下,应用层和内核层的定时器的各种实现方法,并分析了各种实现方法的利弊以及适宜的使用环境。首先,给出一个基本模型,定时器的实现,需要具备以下几个行为,这也是在后面评判各种定时器实现...转载 2018-06-01 17:48:46 · 991 阅读 · 0 评论 -
epoll定时器实现系列文章:高性能定时器实现的三种方式---升序链表,时间轮,最小堆(★firecat推荐★)
就是说,有N多个定时器,如何来实现高效到点执行定时函数的问题。在开发Linux网络程序时,通常需要维护多个定时器,如维护客户端心跳时间、检查多个数据包的超时重传等。定时器的结构有多钟比如链表式,最小堆,时间轮等。在不同应用场景下使用哪种需要考虑效率和复杂度? 时间轮定时器1.时间轮定时器有什么好处,或者说这种结构的定时器能决解什么问题?在升序链表定时器里,可以看到在添加一个定时...原创 2018-06-01 16:25:28 · 5021 阅读 · 0 评论 -
把libevent 2.1.8源码的最小堆提取出来,自己封装成定时器使用(3)(★firecat推荐★)
本篇在第2篇的基础之上,加上类似muduo活塞式的buffer。原创 2018-06-07 10:37:12 · 680 阅读 · 0 评论 -
我个人的Linux TCP server和client测试源码,C语言(1)(★firecat推荐★)
第一篇 TCP server守护进程daemonize的源码可以借鉴redis的:void daemonize(void) { //come from /redis/server.c/daemonize() int fd; if (fork() != 0) exit(0); /* parent exits */ setsid(); /* create a new...原创 2018-01-22 14:41:07 · 10049 阅读 · 0 评论 -
我个人的Linux TCP server和client测试源码,C语言(2)(★firecat推荐★)
直接上源码:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <sys/socket.h>#include <sys/epoll.h>#include <sys/types.h>#in原创 2018-06-06 16:12:38 · 1129 阅读 · 0 评论 -
把libevent 2.1.8源码的最小堆提取出来,自己封装成定时器使用(2)(★firecat推荐★)
本篇实现epoll+时间堆实现定时器---参考文章:使用epoll+时间堆实现高性能定时器原创 2018-06-06 14:45:42 · 558 阅读 · 2 评论 -
把libevent 2.1.8源码的最小堆提取出来,自己封装成定时器使用(1)(★firecat推荐★)
源码来源:https://github.com/libevent/libevent/blob/release-2.1.8-stable/minheap-internal.h---参考文章:基于Libevent最小根堆定时器的C++定时器实现原创 2018-06-06 14:43:11 · 1021 阅读 · 2 评论 -
C++高性能服务框架revolver:同时支持100万个的定时事件的定时器
文章来源:点击打开链接https://github.com/yuanrongxi/revolver在高性能的服务器程序当中,定时器是必不可少的部件,而且定时器的效率是直接影响到服务的性能。在众多的开源项目中,定时器设计都有各有各的方法,例如ACE和libEvent都采用了最小堆的算法实现,还有其他的开源项目采用平衡二叉树来做定时的器管理算法。不管是最小堆还是平衡二叉树,其定时器扫描都是O(1),但...转载 2018-06-04 16:46:05 · 862 阅读 · 0 评论 -
epoll定时器实现系列文章:C语言实现时间堆
文章来源:点击打开链接跟上一篇,这里写一下时间堆:时间轮的滴答是固定以指定的槽间隔触发,而时间堆是以定时器堆中的最小到期时间做定时,也就是alarm(minTimeout),一旦定时器被触发,那么就删除此定时器,更新时间堆,将新的最小到期时间定时器作为新的定时。然后是时间堆的数据结构,这里用了二叉树,将二叉树的根节点作为最小最小到期时间,每次滴答就取根节点,并且是完全二叉树,因此比较容易理解,我也...转载 2018-06-04 15:32:00 · 820 阅读 · 0 评论 -
epoll定时器实现系列文章:C语言实现时间轮
文章来源:点击打开链接看完了《linux高性能服务器编程》对里面的定时器很感兴趣。书中提到三种定时器,分别是:基于升序链表的定时器,基于时间轮的定时器,基于时间堆的定时器。三种定时器的实现书中均是给了C++代码,不过我对C++不太感兴趣,虽然现在在做C++开发,因此写了C版本的。书中定时器只给了封装的定时器类,没有给调用层代码,我是估摸着写了调用层代码。这里做个总结,以后可以翻翻:基于升序链表的定...转载 2018-06-04 15:29:36 · 1181 阅读 · 0 评论 -
libevent实现多线程,one loop per thread,多线程通信
libevent实现多线程LibEvent代码阅读---线程间通信、信号处理libevent并不是线程安全的,但这不代表libevent不支持多线程模式。前几天在微博上看到ruanyf发了条微博说到apache和nginx的并发模型,看到评论很多人都说不对于是自己又查了下,总结一下我所学过的网络库或者网络服务器的并发模型1、muduo:one l转载 2017-09-12 10:46:57 · 5417 阅读 · 0 评论 -
ls -al /usr/lib | grep libevent --- 查看libevent是否已安装
ls -al /usr/lib | grep libevent原创 2017-08-30 15:45:14 · 6014 阅读 · 0 评论 -
Boost ASIO攻破
文章来源:http://www.cppblog.com/shanoa/archive/2009/06/26/88606.aspx花了足足3天时间,外加1天心情休整,终于在第5天编写出了一个能运行的基于asio和thread_group的框架,差点没气晕过去,把源码都看懂了才感觉会用了。测试了一下,debug下一万次回应耗时800+毫秒,release下是200+毫秒,机器配置双核2.5G英转载 2015-09-26 23:57:54 · 3315 阅读 · 0 评论 -
libevent简介和使用(★firecat推荐★)
文章来源:http://blog.csdn.net/yyyiran/article/details/12219737libevent是一个基于事件触发的网络库,memcached底层也是使用libevent库,今天学习下。总体来说,libevent有下面一些特点和优势:* 统一数据源, 统一I/O事件,信号和定时器这三种事件;* 可移植,跨平台支持多种I/O多路复用技术转载 2015-08-19 16:58:00 · 1362 阅读 · 0 评论