首页 › 月度存档 › 1 月 2015

处理大并发之五 使用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,对其同步与阻塞,异步与非阻塞有了一定的认识,现对参考资料总结下。
继续阅读 »

C语言如何打印二进制整数(续)

在上篇文章《C语言小程序:打印整数的二进制》中,大笨兔给出了一个打印二进制整数的程序。程序的算法很简单,从整数的最高位开始访问,然后逐一打印出来。但是在那个程序中有一点小问题,如果你只打印一个8位的整数,前面会同时打印几十个0,有点影响阅读。
继续阅读 »

C语言:可变参数函数

函数一般的参数都是固定的,但是有些时候我们需要让函数的参数是可变的,为了满足这个需求,C语言提供了库函数stdarg.h来满足要求。
继续阅读 »

C语言小程序:打印整数的二进制

整数在内存中到底是怎样存储的?最好的方法就是将其打印出来看一看。在C的标准库中 <stdio.h>中有一个相当强大的输出函数:printf。但是它却不能够打印出整数的二进制形式。怎么办呢?自己写一个吧!
继续阅读 »

boost高并发网络框架+线程池

boost的官方例子,有单线程的网络框架,httpserver2是线程池的。下面参照网上某人的代码修改了一点(忘了哪位大仙的代码了)
测试工具,适用stressmark,测试效果非常好, 9000个/s
继续阅读 »

高并发的epoll+线程池,业务在线程池内

epoll是linux下高并发服务器的完美方案,因为是基于事件触发的,所以比select快的不只是一个数量级。
单线程epoll,触发量可达到15000,但是加上业务后,因为大多数业务都与数据库打交道,所以就会存在阻塞的情况,这个时候就必须用多线程来提速。
业务在线程池内,这里要加锁才行。测试结果2300个/s
继续阅读 »