
Linux服务器
niliushall.
这个作者很懒,什么都没留下…
展开
-
I/O复用之 epoll
epoll 系统调用 1. 内核事件表epoll使用一系列函数来完成任务,把用户关心的文件描述符中的事件放到内核里的一个事件表中,因此不用像select、poll那样每次调用都要重复传入文件描述符集或事件表。epoll需要一个文件描述符来唯一标识该事件表,该文件描述符使用epoll_create函数创建: #include int epoll_create( in原创 2018-02-02 20:09:44 · 421 阅读 · 0 评论 -
I/O复用之 EPOLLONESHOT 事件
EPOLLONESHOT 事件 EPOLLONESHOT 事件 使用EPOLLONESHOT的原因及优点recv返回值 及 与errno的配合使用示例程序1. 使用EPOLLONESHOT的原因及优点即使使用ET模式,一个socket上的某个事件还是可能被触发多次。比如:一个线程在读取完某个socket上的数据后开始处理这些数据,而在数据的处理过程中原创 2018-02-03 19:23:31 · 1330 阅读 · 2 评论 -
基于epoll+threadpool的webServer分析与实现
该webServer使用epoll+threadpool实现,支持GET、POST方法,并添加CGI进行数据计算并返回网页信息,可以解析返回html、picture、mp3、js、css等文件,可以实现稳定的运行。 使用c++编写。源码请看我的Github。流程简述启动服务器,在浏览器输入服务器地址,将向服务器发送HTTP请求服务器接收数据,新建任务,将任务添加到任务队列从线程...原创 2018-07-28 16:45:42 · 935 阅读 · 3 评论 -
【高性能定时器】 时间轮
时间轮 简述顾名思义,时间轮就像一个轮子,在转动的时候外界会指向轮子不同的区域,该区域就可以被使用。因此只要将不同时间的定时器按照一定的方法散列到时间轮的不同槽(即时间轮划分的区域)之中,就可以实现在运转到某个槽时,进行判断该定时器是否已经到达运行时间(需要判断是由于有的定时器并非在这一圈就需要运行,可能需要后面几圈才会运行。从图中也可以看出,每个槽中的定时器是以(双向)链表...原创 2018-07-31 17:08:21 · 9511 阅读 · 0 评论 -
线程池的分析与实现
在需要频繁开线程时,创建和销毁线程会话费大量时间,为了提高效率,我们可以在任务开始前,先创建一定数量的线程。这样在接收到任务时,就可以直接使用线程池中处于wait状态的线程,在任务结束后线程回到wait状态,等待新任务的到来,这就避免了线程的创建与销毁,从而提高程序执行效率。所需数据需要存储有多少线程( int thread_number )需要开辟对应的数组,存储线程号( pth...原创 2018-07-28 10:35:57 · 413 阅读 · 0 评论 -
【高性能定时器】时间堆(最小堆)
最小堆及其应用:时间堆 最小堆及其应用:时间堆 一、 堆1. 概念2. 最小堆的实现3. 性质4. 代码二、时间堆1. 概念简述2. 实现细节3. 代码一、 堆1. 概念 堆是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于(或不小于)其左子节点和右子节点的值。其中,两个叶子节点的大小没有顺序。堆又分为两...原创 2018-08-01 17:15:12 · 10471 阅读 · 4 评论