首页 › 标签存档 › 大并发

自己写的epoll框架(第七根弦)

自己写的epoll框架,不知道为什么listen的第二个参数必须写0,否则用robot并发连接测试的时候,发现连接完成后有大量类似下图的情况。在用telnet发送数据时,没有回显。只要服务端不重启,这个一直存在,而且后面的client再连接也收不到消息
20151103111102
条数刚好是listen第二个参数的大小,废话不说,知道如何解决这个问题的教教我啊!!!
继续阅读 »

Epoll在LT和ET模式下的读写方式

在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK)
从字面上看, 意思是:EAGAIN: 再试一次,EWOULDBLOCK: 如果这是一个阻塞socket, 操作将被block,perror输出: Resource temporarily unavailable
继续阅读 »

Epoll之ET、LT模式

在使用epoll时,在函数 epoll_ctl中如果不设定,epoll_event 的event默认为LT(水平触发)模式。

使用LT模式意味着只要fd处于可读或者可写状态,每次epoll_wait都会返回该fd,这样的话会带来很大的系统开销,且处理时候每次都需要把这些fd轮询一遍,如果fd的数量巨大,不管有没有事件发生,epoll_wait都会触发这些fd的轮询判断。
继续阅读 »

处理大并发之五 使用libevent利器bufferevent

首先来翻译一段文章

你可能注意到随着我们代码变得越来越高效,程序也变得更加复杂。当我们产生一个进程的时候,我们没有必要为每一个链接管理一个buffer,我们只需要每个处理独立栈分配缓冲区就可以了。在读和写的时候,我们不必明确的跟踪每一个socket,这在我们的代码里是一个暗示,我们没有必要定义一个结构体去跟踪每一个操作什么时候完成,我们只需要使用循环栈变量就可以了。
继续阅读 »

处理大并发之四 libevent demo详细分析(对比epoll)

libevent默认情况下是单线程,每个线程有且仅有一个event_base,对应一个struct event_base结构体,以及赋予其上的事件管理器,用来安排托管给它的一系列的事件。

当有一个事件发生的时候,event_base会在合适的时间去调用绑定在这个事件上的函数,直到这个函数执行完成,然后在返回安排其他事件。需要注意的是:合适的时间并不是立即。
继续阅读 »

处理大并发之三 对libevent的初步认识

首先翻译下http://www.wangafu.net/~nickm/libevent-book/01_intro.html里的一段文章
继续阅读 »

处理大并发之二 对epoll的理解,epoll客户端服务端代码

序言:

该博客是一系列的博客,首先从最基础的epoll说起,然后研究libevent源码及使用方法,最后研究nginx和node.js,关于select,poll这里不做说明,只说明其相对于epoll的不足,其实select和poll我也没用过,因为我选择了epoll。
继续阅读 »

处理大并发之一 对异步非阻塞的理解

在研究nginx和node.js的时候常会遇到异步、非阻塞等,之前自己也经常使用epoll,对其同步与阻塞,异步与非阻塞有了一定的认识,现对参考资料总结下。
继续阅读 »