nginx lua mysql 性能_深入浅出 nginx lua 为什么高性能
最近很多人問我nginx lua的優(yōu)勢(shì)是什么?為什么?
一、同步和異步、阻塞和非阻塞
如果要說清楚這個(gè)問題首先要了解:同步和異步、阻塞和非阻塞的關(guān)系
同步:php、java的正常代碼都是同步執(zhí)行的
異步:javascript的回調(diào)函數(shù)就是異步的
說白了自己寫的程序里面如果沒有回調(diào)函數(shù)都是同步的,常見的php、python等語言少有異步代碼,當(dāng)前大量使用異步代碼的有javascript。
阻塞:查詢數(shù)據(jù)庫或者讀寫文件,如果沒有獲取結(jié)果就一直等待,說明是阻塞的。
非阻塞:執(zhí)行之后立刻返回是非阻塞的
比如:nginx的模塊調(diào)用,程序請(qǐng)求了一個(gè)讀數(shù)據(jù)庫的操作,然后該干嘛干嘛,等到讀取結(jié)果返回之后,再做剩下的事情。
二、nginx的非阻塞模型
很多人分不清楚異步和非阻塞的區(qū)別,按照我的理解主要是主體不同,異步指的是自己寫的程序是否有類似回調(diào)函數(shù)的功能,而非阻塞指的是nginx主體調(diào)用讀寫操作,當(dāng)數(shù)據(jù)庫沒有返回結(jié)果的時(shí)候,不影響其他的用戶請(qǐng)求。
由于咱們使用的是lua,使用這個(gè)腳本語言大多場(chǎng)景也是同步的,很好理解,所以咱們主要說一下nginx-lua如何實(shí)現(xiàn)非阻塞的。其實(shí)非阻塞的功能使用nginx實(shí)現(xiàn)的,基本與lua無關(guān),那么nginx如何實(shí)現(xiàn)非阻塞的哪?
一般的web服務(wù)器都是建立在tcp請(qǐng)求基礎(chǔ)之上的非阻塞事件模型,例如:
比如咱們使用tomcat服務(wù)器或者apache服務(wù)器處理一個(gè)請(qǐng)求,肯定是建立一個(gè)線程或者進(jìn)程中完成并返回給服務(wù)器
那么nginx則不然:
他把請(qǐng)求分成了幾個(gè)階段,每個(gè)階段由不同的模塊來處理,這樣就實(shí)現(xiàn)了更全面的非阻塞處理http請(qǐng)求
三、性能
上面分析完了基本的原理,那么為何么nginx-lua的性能由于nginx-php哪?如果并發(fā)數(shù)量不高,那么兩者其實(shí)沒什么區(qū)別,只有并發(fā)數(shù)量上來之后,由于lua運(yùn)行時(shí)占用內(nèi)存特別少,放入了nginx模塊內(nèi)部,可以最大限度的承接nginx提供的非阻塞功能,只要后端數(shù)據(jù)庫io跟的上,那么nginx-lua就能并發(fā)處理很多請(qǐng)求,更詳細(xì)的原因可以參考王曉哲的分析文章:http://developer.51cto.com/art/201207/350070.htm
總結(jié)
以上是生活随笔為你收集整理的nginx lua mysql 性能_深入浅出 nginx lua 为什么高性能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《拟阮公夜中不能寐诗》第七句是什么
- 下一篇: mysql 复制用户_MySQL修改复制