多php與多線程程序設計是脫胎于對高并發需求下的服務器解決方案。這種技術的本質是通過使用多個PHP解釋器,并且同時執行腳本,從而提升服務器端腳本執行的效率和并發處理能力。當然,這種技術并不是所有Web應用都需要的,只有在應用程序設計中需要處理大量獨立事務,或者需要頻繁操作底層計算機資源等情況下才需要考慮采用多PHP技術。
實際上,PHP 的多線程并沒有獲得廣泛的應用,但是在高并發場景下,多PHP卻能夠提供比單線程的處理效率快很多的服務,如N blog中一個用戶訪問某篇文章,將涉及三個步驟:數據庫訪問、PHP腳本解釋、HTML 頁面渲染,這些操作都需要占用處理器計算資源,假設50個用戶同時訪問此篇文章,當系統采用多線程技術時,系統中會有多個線程同時運行一個PHP解釋器,在同時執行的情況下,查詢、解釋、渲染會相互獨立,互不干擾,這樣就大大緩解了高負載下的瓶頸。當然,對于一個PHP線程,只有在該線程在內存中已經準備好,才能得到優先執行,所以在實際使用中,我們需要在服務器內部建立一定數量的 PHP 進程池,每個進程都預先加載所需要的 PHP 擴展模塊和應用程序庫,在請求過來前就已經預加載了大部分的代碼和編譯結果,這樣就能夠有效的提升PHP腳本的執行效率和并發處理能力。
通常多個PHP解釋器同時執行會對CPU造成較大的負載,使CPU處于高負載狀態下,應用程序的性能并不會得到提升,所以在進行多PHP技術的實現時,我們需要考慮一些狀態調整的手段來使CPU處于較低的運行負荷狀態。常用的手段有設置PHP進程工作的CPU親和性、限制 PHP 進程的使用率;如果是網絡瓶頸也可以進行進程通信,嘗試將進程均衡在各臺機器上等,從而達到性能最優的效果。
多個PHP解釋器同時處理數據或者頁面的時候,經常會出現兩個PHP解釋器同時試圖寫同一個文件的情況,這就需要我們考慮并發控制的問題了,比如采用MySQL進行并發控制,通過MySQL的行級鎖或者樂觀鎖控制多個覆蓋并發操作的執行順序。實際操作中需要考慮到鎖的粒度和對程序性能的影響,以得出性能和并發量最佳的方式。
多php的實現是有很多種方式。在Nginx+FastCGI(PHP-FPM)時,可以調用php-fpm的FastCGI多進程支持;在Apache 下,可以采用 mod_php、FastCGI、APC 等模塊;在CLI下可以使用不同端口表示不同Handler,通過自己或者調用third-party開源的PHP封裝組件(如phttpd、phttpdsabre/Dav等)來實現多線程PHP服務,通過多線程技術,不僅可以提升Web應用的性能和并發處理能力,而且還可以實現一些原本需要系統事件輪詢實現的系統操作。
網站導航
- zblogPHP模板zbpkf
- zblog免費模板zblogfree
- zblog模板學習zblogxuexi
- zblogPHP仿站zbpfang