memcached多线程模型 & nginx 多进程模型
来源:互联网 发布:天之痕活物数据修改 编辑:程序博客网 时间:2024/06/06 03:09
memcached和nginx的并发模型,一个是单进程多线程典范,一个是多进程单线程经典。通过对比来将加深一下对这两种并发模型的理解。
首先分析一下两者的应用场景。
共同点:
两个应用,一个是缓存服务,一个是web服务,都是连接暴多请求频繁,而且对响应时间比较敏感的的应用,在这一点上两者需求一样:大量请求,快速响应。服务端程序基本都这需求,逃也逃不掉。
不同点:
其实是废话,不同点就是一个是cache,一个是web,仔细想想两者的区别还是有点 的,就是:不同的请求响应时间相差比较大。什么意思,就是说对于memcached来讲,绝大多数请求服务端处理所花的时间基本是相同的。而nginx就 不一样了,一个客户端的请求有的立刻就可以响应,有的则牵涉到php解析,读文件啊什么的,有响应的几个字节,有的则几百K,相差巨大。
共同点:
因为都需要处理高并发的网络IO,所以都采用了异步模式。memcached使用 libevent(memcached作者曾把libevent换成libev测了一下,结果性能只提升一点点,考虑到换库的成本,作罢了),而 nginx则是自己封装了epoll(linux下)。其实效果是一样的,因为libevent在linux下也是封装了epoll。异步!异步是王道 啊!
memcached下的线程关系跟nginx下的进程关系基本是一样的,都是Master-Worker模式。
不同点:
两者最主要的不同点在于连接的监听和分发上,memcached是主线程负责监听和分发,而nginx则是所有的进程都监听,不需要分发。我认为这两种模式恰恰对应了两者应用上的不同点。
对于memcached来说,绝大多数请求要处理的时间相当,所以主线程监听,然后平均 分配连接,这样各个线程的负载基本差不多,而且监听连接的效率也高。这样memcached使用多线程而不用多进程也可以减少IPC的成本。而nginx 则不一样,请求所需计算时间不定,如果还是简单的RR将连接平均分到各个worker上,可能会造成负载不平均,有的进程比较cpu闲,有的忙死。所以 nginx让各个进程争锁来监听,再加上基本的负载处理,这样虽然增加了争锁的成本,但是能基本保证比较闲的进程更有机会接受新连接。nginx的连接处 理有点抢占的味道。
其实linux下线程仅仅是默认共享内存的进程而已,仅仅!所以,memcached的线程和nginx的进程在调度上没什么区别
- memcached多线程模型 & nginx 多进程模型
- memcached多线程模型 & nginx 多进程模型
- 进程模型-memcached
- memcached-多线程模型
- nginx 之 多进程模型
- nginx的多进程模型
- nginx进程模型,事件模型
- nginx的进程模型
- nginx的进程模型
- Nginx 进程模型
- 进程模型--nginx
- nginx进程模型
- nginx进程模型
- nginx核心进程模型
- Nginx进程模型
- nginx中的进程模型
- Nginx进程模型
- Nginx的进程模型
- 关于网页设计中的一些有趣网站--(持续更新)
- sizeof详解
- C++基本概念总结——构造函数的public/protected/private语义
- Java下载、安装、设置与测试
- Android基础 - 对话框和浮动Activity
- memcached多线程模型 & nginx 多进程模型
- 把c++编译成flash,FlasCC新手入门
- IEInspector HTTP Analyzer Full Edition v7.0.2.420 Incl Keymaker-ZWT
- 解决android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActiv
- 另一种阶乘问题
- Oracle - 利用自带函数进行16进制与字符互转
- BulletedList控件的使用
- 怎样用JS判断单选按钮是否选中?
- hibernate环境搭建