前面關(guān)于 Blink部分有過介紹,Blink 不像其他運(yùn)行在 php-fpm 或者 mod_php 之上的傳統(tǒng) PHP 框架,它的生命周期 也是很不相同的,在使用 Blink 進(jìn)行應(yīng)用開發(fā)時,我們需要時刻牢記這一點(diǎn),以減少不必要的困惑。
在 php-fpm 或者 mod_php 中,幾乎所有的資源(諸如像對象、數(shù)據(jù)庫鏈接等)都僅僅存在于一個請求之間,所有的這些資源都會在請求結(jié)束時釋放。這樣的 工作機(jī)制對于小規(guī)模的應(yīng)用是沒什么問題的,但對于大規(guī)模的應(yīng)用,其所帶來的性能開銷是不可忽視的。這也是為什么 Blink 存在的原因,在 Blink 中, 我們盡最大努力減少資源的重復(fù)申請與釋放,獲得盡可能高的性能。
為此,Blink 的生命周期會比 php-fpm 或者 mod_php 之類更加復(fù)雜,我們在開發(fā) Blink 應(yīng)用的時候也需要謹(jǐn)慎的處理資源的申請與釋放。一個 Blink 應(yīng)用的有三個階段,啟動階段、請求處理階段和退出階段,下面就每個階段進(jìn)行詳細(xì)介紹:
首先,Blink 采用子進(jìn)程來處理用戶請求,每個子進(jìn)程包含一個 Blink 應(yīng)用程序(也就是一個 Blink Application 實(shí)例),每個應(yīng)用會隨著子進(jìn)程的創(chuàng)建 而創(chuàng)建。
一旦 Blink 應(yīng)用創(chuàng)建好后,$application->bootstrap()
方法將會被調(diào)用,啟動應(yīng)用,在這個方法中主要會做以下幾件事情:
一旦應(yīng)用啟動成功,他就會等待并處理服務(wù)器發(fā)送過來的請求。
應(yīng)用啟動之后,就會開始等待處理請求,當(dāng)有請求到來的時候,$application->handleRequest()
將會被調(diào)用來處理這個請求,下面是一個請求處理的 過程:
與 php-fpm 或 mod_php 相比,Blink 很重要的不同就是一個應(yīng)用同時處理多個請求。在這多個請求之間,Application 對象及其注冊在其之上的服務(wù) 都是一直存在并且能夠很好的復(fù)用,盡量減少了不必要的重新申請資源的開銷。也正是因?yàn)檫@個原因,Blink 比 php-fpm 或 mod_php 的性能要高許多。
當(dāng)一個應(yīng)用(或者子進(jìn)程)達(dá)到了 maxRequests
最大處理請求數(shù)量的限制或者接收到 TERM
信號時,該應(yīng)用就會自動退出,對應(yīng)進(jìn)程內(nèi)部的所有資源和 數(shù)據(jù)庫鏈接都會被釋放。
更多建議: