最近很多人问我nginx lua的优势是什么?为什么?

一、同步和异步、阻塞和非阻塞

如果要说清楚这个问题首先要了解:同步和异步、阻塞和非阻塞的关系

  1. 同步:php、java的正常代码都是同步执行的
  2. 异步:javascript的回调函数就是异步的

说白了自己写的程序里面如果没有回调函数都是同步的,常见的php、python等语言少有异步代码,当前大量使用异步代码的有javascript。

  1. 阻塞:查询数据库或者读写文件,如果没有获取结果就一直等待,说明是阻塞的。
  2. 非阻塞:执行之后立刻返回是非阻塞的

比如:nginx的模块调用,程序请求了一个读数据库的操作,然后该干嘛干嘛,等到读取结果返回之后,再做剩下的事情。

二、nginx的非阻塞模型

很多人分不清楚异步和非阻塞的区别,按照我的理解主要是主体不同,异步指的是自己写的程序是否有类似回调函数的功能,而非阻塞指的是nginx主体调用读写操作,当数据库没有返回结果的时候,不影响其他的用户请求。

由于咱们使用的是lua,使用这个脚本语言大多场景也是同步的,很好理解,所以咱们主要说一下nginx-lua如何实现非阻塞的。其实非阻塞的功能使用nginx实现的,基本与lua无关,那么nginx如何实现非阻塞的哪?

一般的web服务器都是建立在tcp请求基础之上的非阻塞事件模型,例如:

比如咱们使用tomcat服务器或者apache服务器处理一个请求,肯定是建立一个线程或者进程中完成并返回给服务器

那么nginx则不然:

他把请求分成了几个阶段,每个阶段由不同的模块来处理,这样就实现了更全面的非阻塞处理http请求

三、性能

上面分析完了基本的原理,那么为何么nginx-lua的性能由于nginx-php哪?如果并发数量不高,那么两者其实没什么区别,只有并发数量上来之后,由于lua运行时占用内存特别少,放入了nginx模块内部,可以最大限度的承接nginx提供的非阻塞功能,只要后端数据库io跟的上,那么nginx-lua就能并发处理很多请求,更详细的原因可以参考王晓哲的分析文章:http://developer.51cto.com/art/201207/350070.htm

深入浅出 nginx lua 为什么高性能的更多相关文章

  1. 基于nginx+lua+redis高性能api应用实践

    基于nginx+lua+redis高性能api应用实践 前言 比较传统的服务端程序(PHP.FAST CGI等),大多都是通过每产生一个请求,都会有一个进程与之相对应,请求处理完毕后相关进程自动释放. ...

  2. 单机闭环 使用Nginx+Lua开发高性能Web应用

    [西域骆驼D1532101213]西域骆驼(VANCAMEL)D1532101213 休闲套脚鞋 卡其43[行情 报价 价格 评测]-京东 http://item.jd.com/1856564.htm ...

  3. 用Nginx+Lua(OpenResty)开发高性能Web应用

    在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡.反向代理.代理缓存.限流等场景:而把Nginx作为一个Web容器使用的还不是那么广泛.Nginx的高性能是大家公认的,而Nginx开 ...

  4. Nginx+Lua(OpenResty)开发高性能Web应用

    使用Nginx+Lua(OpenResty)开发高性能Web应用 博客分类: 跟我学Nginx+Lua开发 架构 ngx_luaopenresty 在互联网公司,Nginx可以说是标配组件,但是主要场 ...

  5. Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Discuz!

    Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Disc ...

  6. 使用Nginx+Lua(OpenResty)开发高性能Web应用

    摘自(http://jinnianshilongnian.iteye.com/blog/2280928) 在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡.反向代理.代理缓存.限流等 ...

  7. 使用Nginx Lua实现redis高性能http接口

    使用Nginx Lua实现redis高性能http接口 时间 -- :: 峰云就她了 原文 http://xiaorui.cc/2015/01/27/使用nginx-lua实现redis高性能http ...

  8. Nginx+Lua+MySQL/Redis实现高性能动态网页展现

    Nginx结合Lua脚本,直接绕过Tomcat应用服务器,连接MySQL/Redis直接获取数据,再结合Lua中Template组件,直接写入动态数据,渲染成页面,响应前端,一次请求响应过程结束.最终 ...

  9. nginx+lua的基本原理概念介绍

    一. 概述 Nginx是一个高性能,支持高并发的,轻量级的web服务器.目前,Apache依然web服务器中的老大,但是在全球前1000大的web服务器中,Nginx的份额为22.4%.Nginx采用 ...

随机推荐

  1. MySQL5.6 报错1067

    http://www.cnblogs.com/lixiaolun/p/5303687.html

  2. 大熊君说说JS与设计模式之------状态模式State

    一,总体概要 1,笔者浅谈 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式. 状态模式主要解决的是当控制一个对象状态的条件表达式过于 ...

  3. [C++] 井字棋游戏源码

    TicTac.h #define EX 1 //该点左鼠标 #define OH 2 //该点右鼠标 class CMyApp : public CWinApp { public: virtual B ...

  4. [ACM_搜索] POJ 1096 Space Station Shielding (搜索 + 洪泛算法Flood_Fill)

    Description Roger Wilco is in charge of the design of a low orbiting space station for the planet Ma ...

  5. iOS——Swift开发中的单例设计模式(摘译,非原创)

    最近在开发一个小的应用,遇到了一些Objective-c上面常用的单例模式,但是swift上面还是有一定区别的,反复倒来倒去发现不能按常理(正常的oc to swift的方式)出牌,因此搜索了一些帖子 ...

  6. memcached与.NET的融合使用(二)

    memcached部署完成之后,对当前缓存中数据的监控就显得比较迫切,这里看到网上开源的memadmin比较小巧好用,决定用它来查看监控memcached. 下载memadmin1.0.11,地址:h ...

  7. SpringMVC文件上传实现

    SpringMVC(注解)上传文件需要注意的几个地方:1.form的enctype="multipart/form-data",这个是上传文件必须的2.applicationCon ...

  8. Qt之Dialog\widget\ mainwindow的区别和布局管理器 & 分裂器的区别

    1.Dialog\widget\ mainwindow的区别 注意mainwindow和widget的区别,mainwindow都工具栏和菜单栏 Dialog and mainwinodws 都是继承 ...

  9. Jstat在分析java的内存GC时的应用

    jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量.使用时,需加上查看进程的进程id,和所选参数. 执行:cd $JAVA_HOME/bin中执行jstat,注意j ...

  10. 深究JS异步编程模型

    前言  上周5在公司作了关于JS异步编程模型的技术分享,可能是内容太干的缘故吧,最后从大家的表情看出"这条粉肠到底在说啥?"的结果:(下面是PPT的讲义,具体的PPT和示例代码在h ...