常见开源产品epoll网络事件模型分析(附200万QPS实现长连接echo server方案)

摘要:redis、thrift-noblocking-server、memcached、nginx等开源产品 四种不同场景下不同网络模型 分析

最近利用业余时间对基于epoll的网络服务模型做了一些调研和测试,既是复习也是一次再学习。在调研过程中,结合现有的开源产品的方案做了一些分析,看了很多源码也看了很多资料。大概有所了解,遂 做一下总结和分享,如果不对,欢迎指正。
原文链接: http://blog.csdn.net/answer3y/article/details/48276687

-----------------------
2016年07月30日注,后续博客需要更新的内容: 
更深入分析瓶颈在哪里?
增加类redis的单线程框架的实验效果
-----------------------

本文要描述的主要有如下6种模型:
1)epoll 1线程(listen+accept+epoll_wait+处理) 模型 ...........................................代表产品redis
2)epoll 1线程(listen+accept+epoll_wait) + 1队列通知 + n线程(处理) 模型............代表产品thrift-nonblocking-server
2)epoll 1线程(listen+accept+epoll_wait) + n队列通知 + n线程(处理) 模型............代表产品memcached 
4)epoll 1进程(listen) + n进程(accept+epoll_wait+处理) 模型...............................代表产品nginx
5)epoll 1线程(listen) + n线程(accept+epoll_wait+处理) 模型
6)  epoll 1线程(listen+accept) + n线程(epoll_wait+处理) 模型
最后还有一个章节,对6种模型做一下统一的总结。

在分析之前,不妨先复习一下epoll网络编程几个主要函数的用途,这样能更好的理解下面6种模型
listen_fd = socket(...);              // 创建listen_fd
bind(listen_fd, addr);                // 把listen_fd绑定到本地地址addr
listen(listen_fd, ...);               // 监听listen_fd 
fd = accept(listen_fd, ...);          // 从listen_fd接受一个新接进来的连接套接字fd
epfd = epoll_create(...);             // 创建指定大小的epoll句柄epfd
epoll_ctl(epfd, op, fd, event);       // 对epfd做op操作,操作涉及监听fd的event事件
                                      // 比如op是EPOLL_CTL_ADD,意思是把 “对fd监听event事件” 注册到 epfd里面
num = epoll_wait(epfd, events, ...);  // 监听句柄epfd上的事件,并把事件通过event数组返回,num返回值是发生事件的个数


一、epoll 1线程(listen+accept+epoll_wait+处理) 模型 </

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值