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

來源:互聯網
上載者:User
如題,能否給出詳細的理由,謝過。

回複內容:

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

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

定義多線程類 extends Thread

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

首先看前提條件:

php不支援多線程

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

不用考慮並發問題

前提不成立,結論也就沒有什麼因果關係了。
我理解說這句話的人的本意是:因為 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支援進程池設定,支援靜態和動態進程數量設定,支援天然的透明的"資料庫連接池"(持久串連):

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

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.