浅谈nodejs与php设计构思层面上的差异
nodejs最近火的一塌糊涂,那為什么它可以成為千百程序員的新寵呢?
難道只是因?yàn)榘裫s搬到了服務(wù)端?如果僅僅是這樣是遷移了一個(gè)運(yùn)行環(huán)境和增加幾個(gè)模塊的話我想完全不可能會(huì)得到喜新厭舊的程序員的青睞
nodejs和php的差異主要是兩個(gè)方面:分工和運(yùn)行機(jī)制
分工:nodejs直接跳過(guò)了服務(wù)器這個(gè)階段,把創(chuàng)建服務(wù)器作為node的一個(gè)模塊,監(jiān)聽(tīng)請(qǐng)求這些應(yīng)該是服務(wù)器做的工作現(xiàn)在變成了node做,這樣就簡(jiǎn)化的開(kāi)發(fā)環(huán)境,而且更加容易控制監(jiān)聽(tīng)請(qǐng)求以及響應(yīng).也就是說(shuō)node沒(méi)有一個(gè)web容器,沒(méi)有根目錄的概念。
運(yùn)行機(jī)制:
php在處理并發(fā)的時(shí)候是通過(guò)多線程處理,這樣會(huì)導(dǎo)致硬件成本的增加,特別是一些頻繁I/0的項(xiàng)目,很多的線程被阻塞,cpu得不到充分的利用。
node:node的核心理念是單線程,通過(guò)事件和回調(diào)實(shí)現(xiàn)并發(fā)。既然是單線程,那硬件成本自然比較低。
那單線程怎么實(shí)現(xiàn)并發(fā)呢?我認(rèn)為正是這種實(shí)現(xiàn)的方法讓大家耳目一新,所以才會(huì)讓node如此的火,
并發(fā)實(shí)現(xiàn)原理:比如一百個(gè)請(qǐng)求要做一百件事,當(dāng)?shù)谝粋€(gè)請(qǐng)求執(zhí)行到i/o的時(shí)候立馬掛起,不等待i/o成功,直接執(zhí)行下一個(gè)事件,直到i/o完畢,這是觸發(fā)回調(diào)事件,回調(diào)事件的優(yōu)先級(jí)會(huì)比普通事件的優(yōu)先級(jí)高,就是這樣通過(guò)異步來(lái)實(shí)現(xiàn)單線程的并發(fā)處理。保證了線程永遠(yuǎn)有事做,不會(huì)等待
缺點(diǎn):這樣是提高了cup的利用率,但是無(wú)疑是把所有雞蛋放在一個(gè)籃子里面,如果有個(gè)事件導(dǎo)致線程蹦了,直接的后果就是導(dǎo)致線程上的所有任務(wù)事件都蹦了,還有如果是運(yùn)算的阻塞是沒(méi)法并發(fā)的,所以這就局限了它只是適合做大量i/o的應(yīng)用場(chǎng)景,不適合做大量計(jì)算的項(xiàng)目,例如股票這類型的。
node還有一個(gè)很大的特點(diǎn)就是路由功能,需要自己去配置,應(yīng)為沒(méi)有服務(wù)器軟件,所以服務(wù)器軟件的所有功能都需要自己去寫(xiě),但是常用的功能在開(kāi)源社區(qū)基本都已經(jīng)有人寫(xiě)好了,對(duì)于我這樣的喳喳來(lái)說(shuō)簡(jiǎn)直就是福音啊。
以上筆記單純代表個(gè)人觀點(diǎn),有不同意見(jiàn)的歡迎打攪。
總結(jié)
以上是生活随笔為你收集整理的浅谈nodejs与php设计构思层面上的差异的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 希沃白板5使用方法
- 下一篇: 盘点国产青春电影十宗罪