C++
文章平均质量分 58
dongfuye
广泛涉猎各种技术,github.com/yedf
展开
-
C++ 高性能无锁日志系统
这里的日志系统指的是程序日志,用于记录程序运行中原创 2014-08-02 16:23:16 · 1226 阅读 · 0 评论 -
10行代码编写一个c++服务器
Handy是一个简洁优雅的C++11网络库,适用于linux与Mac平台。十行代码即可完成一个完整的网络服务器。下面是echo服务器的代码:#include >using namespace std;using namespace handy;int main(int argc, const char* argv[]) { EventBase bases; //事件原创 2015-07-07 10:29:25 · 2465 阅读 · 0 评论 -
单机千万并发连接实战
c10k,c100k,c1000k等问题大家都已经司空见惯,那么10m(千万)并发连接呢?今天就来一起挑战一下吧。准备机器 10m连接,大家的个人电脑肯定无法满足要求,如果不是在大公司任职,弄个实际的物理机对大家是个奢望。那么怎么办?我也面临同样问题。 现在的云计算这么发达,还可以按小时计费,一小时的费用也就几元,那就试试云计算产品吧。小编先是在阿里云上测试,但阿里云的按需付费主机配置不高,原创 2015-08-26 11:43:36 · 4245 阅读 · 0 评论 -
千万并发连接注意点
对于一台服务器来说,支撑千万并发连接是一个挑战,我们来看看有哪些限制,并且如何解决首先是内存问题,默认设置下,系统为每个tcp连接分配4k的rmem和4k的wmem,那么一个连接需要8k的内存,1kw连接需要80G内存。 修改系统的这两个配置,改为1k的rmem和wmem,则需要的内存为20G,实际使用中还会有其他的内存开销,因此最好准备32G或更大的内存 sysctl -w net.ipv4.原创 2015-08-26 11:57:55 · 1126 阅读 · 0 评论 -
半同步半异步高性能网络编程
网络编程的模式分为3种:1. nginx的全异步方式,使用epoll处理网络数据,对于请求的处理也完全是异步的。任何一个请求的处理如果花费了较长时间,那么nginx进程就会被处理操作阻塞,导致无法处理IO事件2. 简单的一个连接一个线程方案,这种方案无法处理大量并发的连接,适用mysql这类连接数不多的场景。其中也有一些优化的做法,例如使用线程池避免不断的创建销毁线程。3. 半同步半异原创 2015-07-27 10:52:02 · 2205 阅读 · 0 评论 -
kqueue示例
网络服务器通常都使用epoll进行异步IO处理,而开发者通常使用mac,为了方便开发,我把自己的handy库移植到了mac平台上。移植过程中,网上居然没有搜到kqueue的使用例子,让我惊讶不已。为了让大家不用像我一样再次花费大力气搞定kqueue,我整理了一个简单清晰可运行的kqueue例子,供大家参考。 kqueue一共有几个函数:int kqueue(void); //类似epoll_cr原创 2015-07-16 11:14:59 · 4783 阅读 · 1 评论 -
epoll示例
epoll示例linux下的非阻塞网络编程必定离不开epoll。epoll的使用一共有三个函数:int epoll_create(int size);函数产生一个epoll句柄,其中size参数在linux内核2.6.8会被忽略,但一定要大约0。int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);epoll的事件注册函原创 2015-07-05 18:42:31 · 861 阅读 · 0 评论 -
leveldb性能调优
许多的nosql都使用leveldb或者类似leveldb的系统作为存储引擎,例如tair,hbase,canssandra,因此理解并调优存储引擎可以大大的提高系统的性能。前一篇大致介绍了原理,这一篇接下来讲解调优相关的内容。leveldb中的写放大一条记录写到leveldb,则会写一次到log,写一次到level 0,随着后面更多数据的写入,level n里原创 2015-07-09 15:57:39 · 7120 阅读 · 0 评论 -
leveldb为什么这么快
nosql数据库大多采用leveldb或者类似leveldb的存储引擎,我们来看看它为什么能够这么快。levelDB则采用了一种全新的数据结构,叫做log structured merge tree(LSMT)原创 2015-07-09 14:23:48 · 3327 阅读 · 0 评论 -
非阻塞/异步(epoll) openssl
前段时间在自己的异步网络框架handy中添加openssl的支持,当时在网络上搜索了半天也没有找到很好的例子,后来自己慢慢的摸索,耗费不少时间,终于搞定。因此把相关的资料整理一下,并给出简单的例子,让后学者可以少费些力气。同步的openssl调用网上已经有许多的例子,这里就不再详细介绍,大家也可以直接读源代码:同步客户端:https://github.com/yedf/openss原创 2015-07-09 17:00:25 · 4152 阅读 · 1 评论 -
epoll LT/ET 深入剖析
LT的编程与poll/select接近,符合一直以来的习惯,不易出错ET的编程可以做到更加简洁,某些场景下更加高效,但另一方面容易遗漏事件,容易产生bug原创 2016-03-13 21:16:38 · 8425 阅读 · 3 评论