首頁 > 後端開發 > php教程 > php不支援多線程,所以不用考慮並發問題?這句話,對嗎

php不支援多線程,所以不用考慮並發問題?這句話,對嗎

WBOY
發布: 2016-08-04 09:21:51
原創
1230 人瀏覽過

如題,能否給出詳細的理由,謝過。

回覆內容:

如題,能否給出詳細的理由,謝過。

平常說的並發多數是針對服務的,比如說 apache nginx
而不是說php
再加上 php是有多線程擴展的 只是平時項目中沒有用到而已

定義多執行緒類別 extends Thread

其實這句話本身是歧義的。

首先看前提條件:

<code>php不支持多线程
</code>
登入後複製

PHP 語言程式碼本身(大部分情況下)是不關心自身是多進程還是多執行緒的。但,這並不表示 PHP 不支援多執行緒/多進程。 php-fpm 就是多行程單執行緒的,apeche 的多執行緒模式就是多執行緒的。 PHP 只是一般不會在 PHP 程式碼層級直接控制進程或執行緒。

<code>不用考虑并发问题
</code>
登入後複製

前提不成立,結論就沒有什麼因果關係了。
我理解說這句話的人的本意是:因為 PHP 一般不支援控制進程、線程,所以也不會從直接透過程式碼控制進程、線程來應對並發問題。
這麼說是沒什麼問題的。

但是,並發問題還依舊是並發問題,不會因為 PHP 程式碼本身不太支援解決並發問題,並發問題就不存在的。
解決 PHP 的並發問題常規方式是透過各種配置的調整(nginx.conf, php-fpm.ini, php.ini)、然後就是負載平衡之類的方式來解決的。這些不是 PHP 程式碼,但是與 PHP 相關密切的東西,作為 PHPer 也是需要掌握的。

另外,針對特定的業務類型修改 PHP 邏輯,甚至前端呼叫邏輯也是有的。還有包括 swoole 之類徹底拋棄 php-fpm 的擴展方式,將 PHP 從基礎上支援非同步並發(然而還是單線程)。這些並發優化方式就要針對具體業務來選擇了。

錯,牛頭不對馬嘴!

PHP是不支援多線程,但是命令列程式的後台運行或web應用程式的php-fpm都可以是多進程並發處理的,所以避免不了產生並發問題,比如一個訂單就1個庫存,兩個並發請求同時上來你如何保證訂單不超賣?

就算不考慮多執行緒 並發依然存在 並且更難解決 還是要想辦法去避免和優化的

並發只有多執行緒?這也太狹隘了

PHP本來就支援多執行緒呀,所以才有線程安全和非線程安全的區別.
PHP的多執行緒擴充請看:
https://pecl.php.net/package/pthreads
這個擴充功能提供了實實在的PHP多線程編程支援,一般用於cli下的腳本編程.
另外國人峰哥還開發了一個提供了異步多線程架構支持用PHP開發高性能實時網絡服務的擴展Swoole:
https: //pecl.php.net/package/swoole
Swoole裡的多線程並不需要編程者關心,它更像一套架構,你只需配置,Swoole一般也是用於cli下的腳本編程.

像經常跟Nginx配合使用的PHP FastCGI服務PHP-FPM是使用多進程實現利用多核心應對並發,跟採用prefork MPM的Apache類似.PHP-FPM支援進程池設定,支援靜態和動態的進程數量設定,支持天然的透明的"資料庫連接池"(持久連接):
php不支援多線程,所以不用考慮並發問題?這句話,對嗎

MOD_PHP搭配採用event MPM的Apache跑的時候也是工作於多執行緒狀態,因為Apache event MPM是一個多進程多執行緒事件驅動的MPM,這是PHP需要使用執行緒安全版本.

相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板