nginx lua mysql 性能_深入浅出 nginx lua 为什么高性能

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

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

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

同步:php、java的正常代码都是同步执行的

异步:javascript的回调函数就是异步的

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

阻塞:查询数据库或者读写文件,如果没有获取结果就一直等待,说明是阻塞的。

非阻塞:执行之后立刻返回是非阻塞的

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

二、nginx的非阻塞模型

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

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

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

fe6c3c6cc4fe5ea57023f2068ee51335.png

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

那么nginx则不然:

f5f3d2aafa58c91245fa0ed70b601c12.png

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

三、性能

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/380901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我们的生命,不因别人的喜欢而存在

我们的生命,不因别人的喜欢而存在 过去咱们中国人讲的是“路遥知马力,日久见人心”“人不可貌相,海水不可斗量”,比较注重的是心灵美。大家都在一个村庄住着,谁是个什么人,彼此心里都有数。生活节奏慢&…

RtlAdjustPrivilege() 提权函数

RtlAdjustPrivilege(SE_DEBUG_NAME,1,0,NULL);这玩意是在 NTDLL.DLL 里的一个不为人知的函数,MS没有公开,原因就是这玩意实在是太NB了,以至于不需要任何其他函数的帮助,仅凭这一个函数就可以获得进程ACL的任意权限! 先来看看这个函数的定义(Winehq给出): NTSTATUS …

求两个数字的乘积,如果大于0,说明两个数字同号,如果小于0,说明两个数字异号,如果等于0,说明其中一个是0

学了java基础东西,就写了这个编程,求两个数字的乘积,如果大于0,说明两个数字同号,如果小于0,说明两个数字异号,如果等于0,说明其中一个是0 首先程序要求我们输入两个数字&#xff0c…

mysql gtid 开启失败_mysql开启GTID跳过错误的方法【转】

1、数据库版本MySQL> select version()-> ;-------------------------------------------| version() |-------------------------------------------| 5.7.17 |------------------------------------…

处理机流水线------经典五段流水线

文章是在我遇到这部分问题时查找的所有感觉挺好的内容的整合(全部是转载的) 流水线基础理论就不加了,最新的处理器流水线处理的机制也没有(一般以用不到),想了解去随便找个芯片厂商官网下个手册自己查。 这…

mysql 复制用户_MySQL修改复制用户及密码

在生产环境中有时候需要修改复制用户账户的密码,比如密码遗失,或者由于多个不同的复制用户想统一为单独一个复制账户。对于这些操作应尽可能慎重以避免操作不同导致主从不一致而需要进行修复。本文描述了修改复制账户密码以及变更复制账户。 1、更改复制…

MUL,IMUL指令溢出

MUL 用途: 该指令完成两个无符号值的乘法运算。   语法结构/举例   mul regB|memB   mul bl   mul regW|memW   mul [aword]   仅80386有:   mul regDW|memDW mul ebx   示范代码   DATASEG   multiplicand dw 1024   multiplier …

求1+2+......+100的和

如何求12…100的和?有很多方法,这里我介绍用三种循环方法去求12…100的和 方法一:for循环: 代码如下: /**1. 求12......100的和2. 方法1:for循环*/ public class Demo2 {public static void main(String[…

台湾游戏企业抢滩大陆 研发成竞争核心

近日,台湾游戏企业进驻大陆设立研发机构、产品同大陆企业联合运营、大陆企业的产品进入台湾联运,以及最新的政策新闻,都将大陆和台湾这对本是同根的产业兄弟推上了风口浪尖。 在正在举行的“第二届中国优秀游戏制作人评选大赛”上&#xff0c…

phpstud如何安装mysql新版_MySQL_图解MySQL数据库的安装和操作,一、MySQL下载与安装 1、 - phpStudy...

图解MySQL数据库的安装和操作一、MySQL下载与安装1、下载介绍MySQL相信大家一定听说过,如果不知道它是干什么的,可以去google一下。MySQL的大本营:http://www.mysql.com/MySQL的下载地址:http://dev.mysql.com/downloads/ 因为要从…

erlang小技巧

.列表操作 lists:foreach(fun(X) -> io:format("E~p~n",[X]) end, [1,2,3]). lists:duplicate(10, 16#f). % [15,15,15,15,15,15,15,15,15,15] "abc-123" -> "abc" no_vsn(Name) -> lists:takewhile(fun($-)->false;(_)-> true …

mysql 插入中文 ERROR 1366 (HY000): Incorrect string value: '\xE7\x8E\x9E\x97' for column

1、出现这个问题,是因为我们的字符编码设置出现了问题,用cmd打开命令终端,查看我们的数据库设置: 2、输入命令use crm(crm是我创建的数据库,大家在修改时换成自己的数据库名即可) 再输入:show …

handlersocket mysql_Mysql插件之HandlerSocket的安装、配置、使用

HandlerSocket简介HandlerSocket是针对Mysql的一个NoSQL插件,它作为一个守护进程工作在mysqld进程里面,接收tcp连接,并处理来自客户端的请求。HandlerSocket不支持SQL查询,作为替代,它支持表的简单的CRUD操作。由于下面的原因&…

【转】TeeChart的用法

/// <summary> /// 获得数据集 /// </summary> /// <param name"sqlStr">传递查询语句</param> /// <returns>返回数据集</returns> public static DataSet GetDataSet(string sqlStr) { string conns…

java,jdk安装,配置环境变量,window10系统

1、找到我们要安装的jdk软件&#xff0c;软件下载我就不介绍了&#xff0c;jdk下载连接地址 然后安装&#xff0c;一直点下一步就可以了&#xff0c;这里不建议跟换软件目录&#xff0c;毕竟第一次用&#xff0c;出了什么错就不好弄了&#xff0c;注&#xff1a;记得软件的安装…

solr mysql数据注入_(solr系列:四)将mysql数据库中的数据导入到solr中

在前面的博文中&#xff0c;已完成了在tomcat中对solr的部署&#xff0c;为solr添加了一个自定义的core,并且引入了ik分词器。那么该如何将本地的mysql的数据导入到solr中呢&#xff1f;准备工作&#xff1a;1、mysql数据源&#xff1a;myuser库中的user表(8条数据)/*Navicat M…

40种Javascript中常用的使用小技巧【转】

1. οncοntextmenu"window.event.returnValuefalse" 将彻底屏蔽鼠标右键< table border οncοntextmenureturn(false)>< td>no< /table> 可用于Table 2. < body onselectstart"return false"> 取消选取、防止复制 3. οnpaste&q…

超链接去下划线

在a标签里加上 style"text-decoration: none

Silverlight学习笔记(三):创建第一个Silverlight应用程序

在开始创建程序之前&#xff0c;还是要提一下关于Silverlight开发环境搭建的问题。如果使用VS2010&#xff0c;这可以搭建Silverlight4的开发环境。我推荐大家看这篇由大牛jv9撰写的【轻松建立Silverlight 4开发环境】。 我使用的是VS2008&#xff0c;所以要搭建的是Silverlig…

按钮旁边加一个提示_地铁站的那些“红色按钮”,你知道是干啥用的吗?乱按可能被拘留...

地铁紧急停车按钮图片来自网络位置&#xff1a;站台两侧墙壁上&#xff0c;靠近列车车头、车尾两侧。外观&#xff1a;上锁的红色四方小盒子&#xff0c;按钮为红色&#xff0c;旁边写有“紧急停车按钮”等字样。使用&#xff1a;紧急时刻击碎中间玻璃&#xff0c;按压按钮。红…