摘要: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+处理) 模型 </
摘要: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+处理) 模型 </