飞猪旅游的网站建设,idc新人如何做自己的网站,网站架构优化,网站建设作品图片最近很多人问我nginx lua的优势是什么#xff1f;为什么#xff1f;一、同步和异步、阻塞和非阻塞如果要说清楚这个问题首先要了解#xff1a;同步和异步、阻塞和非阻塞的关系同步#xff1a;php、java的正常代码都是同步执行的异步#xff1a;javascript的回调函数就是异…最近很多人问我nginx lua的优势是什么为什么一、同步和异步、阻塞和非阻塞如果要说清楚这个问题首先要了解同步和异步、阻塞和非阻塞的关系同步php、java的正常代码都是同步执行的异步javascript的回调函数就是异步的说白了自己写的程序里面如果没有回调函数都是同步的常见的php、python等语言少有异步代码当前大量使用异步代码的有javascript。阻塞查询数据库或者读写文件如果没有获取结果就一直等待说明是阻塞的。非阻塞执行之后立刻返回是非阻塞的比如nginx的模块调用程序请求了一个读数据库的操作然后该干嘛干嘛等到读取结果返回之后再做剩下的事情。二、nginx的非阻塞模型很多人分不清楚异步和非阻塞的区别按照我的理解主要是主体不同异步指的是自己写的程序是否有类似回调函数的功能而非阻塞指的是nginx主体调用读写操作当数据库没有返回结果的时候不影响其他的用户请求。由于咱们使用的是lua使用这个脚本语言大多场景也是同步的很好理解所以咱们主要说一下nginxlua如何实现非阻塞的。其实非阻塞的功能使用nginx实现的基本与lua无关那么nginx如何实现非阻塞的哪一般的web服务器都是建立在tcp请求基础之上的非阻塞事件模型例如比如咱们使用tomcat服务器或者apache服务器处理一个请求肯定是建立一个线程或者进程中完成并返回给服务器那么nginx则不然他把请求分成了几个阶段每个阶段由不同的模块来处理这样就实现了更全面的非阻塞处理http请求三、性能上面分析完了基本的原理那么为何么nginxlua的性能由于nginxphp哪如果并发数量不高那么两者其实没什么区别只有并发数量上来之后由于lua运行时占用内存特别少放入了nginx模块内部可以最大限度的承接nginx提供的非阻塞功能只要后端数据库io跟的上那么nginxlua就能并发处理很多请求更详细的原因可以参考王晓哲的分析文章http://developer.51cto.com/art/201207/350070.htm