剛開始只知道php可以做網站,從來沒有接觸過php的線程問題,今天突然瞭解到php是單線程的,可是突然想到,php做的網站肯定是用於多人訪問的,如果訪問量大,那豈不是出現排隊問題?
這是真的嗎?還是apache在處理php程式的時候會用伺服器實現多線程呢?
回複討論(解決方案)
nginx+php
nginx+php
可否說得詳細些呢?這意思是apache+php是單線程的?
nginx+php
查了下,貌似明白了,apache+php是阻塞型處理,nginx+php是非同步非阻塞的
應對 http 的訪問,是 網頁伺服器的事情,與 php 沒什麼關係
php 只是作為 網頁伺服器的指令碼出現的
應對 http 的訪問,是 網頁伺服器的事情,與 php 沒什麼關係
php 只是作為 網頁伺服器的指令碼出現的
蒙了,那一般說php是單線程和java的多線程的是什麼意思呢?求指導,求詳解啊,不用太深
可以用WEB伺服器多線程調用PHP!
php有進程管理器,fpm fcgi什麼的。php語言本身是沒有多線程的。
應對高並發的話,用nginx或其他軟體做負載平衡服務。php層面可以用gzip壓縮和緩衝等等。
PHP確實沒有多線程,因此不能在代碼裡再開一個線程去執行其他任務,不能像java一樣,同一時刻有多條主線邏輯在執行.但是這和大訪問量並沒有多大關係, 因為請求過來,是nginx或apache處理的,然後調用php處理,調用可以是同時進行的,會開啟許多要訪問指令碼的進程,進程與線程是不同的.每個使用者都會對應伺服器的一個php指令碼進程,執行過後(頁面被開啟),進程就被銷毀,記憶體得到釋放.
PHP確實沒有多線程,因此不能在代碼裡再開一個線程去執行其他任務,不能像java一樣,同一時刻有多條主線邏輯在執行.但是這和大訪問量並沒有多大關係, 因為請求過來,是nginx或apache處理的,然後調用php處理,調用可以是同時進行的,會開啟許多要訪問指令碼的進程,進程與線程是不同的.每個使用者都會對應伺服器的一個php指令碼進程,執行過後(頁面被開啟),進程就被銷毀,記憶體得到釋放.
那單例模式中
if($instance == null) {
$instance = new instance();
}
這塊會不會因為伺服器調用多個php指令碼進行處理,兩個調用同時進行了,從而導致new出兩個instance呢?
php處理完一個進程,才會接著去處理其他的進程。
所有被啟動的 php 解譯器都是相互獨立的
自然被其解釋的 php 代碼也是相互獨立的
所謂單例,只是對於當前啟動並執行 php 代碼集合而言的
個人理解, php 就是一個開發語言,無關 幾線程。
PHP確實沒有多線程,因此不能在代碼裡再開一個線程去執行其他任務,不能像java一樣,同一時刻有多條主線邏輯在執行.但是這和大訪問量並沒有多大關係, 因為請求過來,是nginx或apache處理的,然後調用php處理,調用可以是同時進行的,會開啟許多要訪問指令碼的進程,進程與線程是不同的.每個使用者都會對應伺服器的一個php指令碼進程,執行過後(頁面被開啟),進程就被銷毀,記憶體得到釋放.
那單例模式中
if($instance == null) {
$instance = new instance();
}
這塊會不會因為伺服器調用多個php指令碼進行處理,兩個調用同時進行了,從而導致new出兩個instance呢?
會啊, 單例模式在PHP中只會正對當前啟動並執行指令碼, 你也指出了, 是要先檢測$instance 是否為空白的, 這僅僅局限於本次啟動並執行指令碼不會new出多個對象