最近很多人问我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. [stm32][ucos] 1、基于ucos操作系统的LED闪烁、串口通信简单例程

    * 内容简述: 本例程操作系统采用ucos2.86a版本, 建立了5个任务            任务名                                             优先级 ...

  2. AngularJS应用页面切换优化方案

    葡萄城的一款尚在研发中的产品,对外名称暂定为X项目.其中使用了已经上市的Wijmo中SpreadJS产品,另外,在研发过程中整理了一些研发总结分享给大家.如本篇的在页面切换的过程中优化方案,欢迎大家跟 ...

  3. [公告]这里的博客将不再更新,最新博客请移步至blog.coderzh.com

    公告:我的博客已迁移至独立博客:http://blog.coderzh.com/  感谢大家支持!同时欢迎关注我的微信公众号:hacker-thinking <---- 扫描左侧二维码关注

  4. CSS关于元素垂直居中的问题

    今天碰到了一个问题,给一个父容器和一个子元素,子元素不定高和不定宽,怎么让子元素居中在父容器中,比如下段代码 方法1: <div class="div1"> <d ...

  5. CSS3 圆角制作的消息提示图标

    CSS3 圆角制作的消息提示图标,如果你想知道它是如何被开发的,请点击连接查看.http://www.gbtags.com/gb/rtreplayerpreview/142.htm

  6. atitit.标准时间格式 互相转换 秒数 最佳实践

    atitit.标准时间格式 互相转换 秒数 最佳实践 例如00:01:19 转换为秒数  79,,and互相转换 一个思路是使用div 60 mod...不过麻烦的... 更好的方法是使用stamp ...

  7. paip.解决中文url路径的问题图片文件不能显示

    paip.解决中文url路径的问题图片文件不能显示 #现状..中文url路径 图片文件不能显示 <img src="img/QQ截图20140401175433.jpg" w ...

  8. webpack学习之入门实例

    webpack:前端打包神器,目前活跃度甚至超过了gulp.grunt等,使用webpack打包,简单快速,下面记录下webpack环境搭建以及基本使用: 1.首先新建一个空白目录,用于项目根目录,比 ...

  9. SQLite数据库增删改查操作

    一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库——SQLite,SQLite3支持NULL.INTEGER.REAL(浮点数字).TEXT(字符串 ...

  10. python一个简单的登录

    文件目录下有两个文件 user_name.txt lock_file.txt 实际中可以读数据库里的信息 代码如下 #encoding = utf-8 import sys user_file = ' ...