導航:首頁 > 編程語言 > php有多線程嗎

php有多線程嗎

發布時間:2024-07-04 08:10:06

A. php真的有多進程,多線程嗎

通常意義上所說的多進程是由apache調度的,比如html頁面同時發送5個ajax請求的時候,那麼5個php進程會幾乎同時進行。
PHP本身是不存在多線程的,總是單線程的方式執行。

誤區就是PHP可以通過特別的手段用多進程的方式來模擬多線程,不過幾乎用不到。因為PHP不像java之類的本身有進程管理機制,因此模擬的多線程非常不好控制,同時效率也並不高。

B. 有什麼辦法可以實現php控制多線程運行

php(做為現在的主流開發語言)中實現多線程? 看到這個標題, 你一定以為我瘋了..但是事實上我真的這么做了.
下面是我的一些做法, 已經實驗過. 確實可以的.
我們知道php(做為現在的主流開發語言)本身是不支持多線程的, 但是我們的WEB伺服器是支持多線程的.
也就是說可以同時讓多人一起訪問. 這也是我在php(做為現在的主流開發語言)中實現多線程的基礎.
假設我們現在運行的是a.php(做為現在的主流開發語言)這個文件. 但是我在程序中又請求WEB伺服器運行另一個b.php(做為現在的主流開發語言)
那麼這兩個文件將是同時執行的.
(PS: 一個鏈接請求發送之後, WEB伺服器就會執行它, 而不管客戶端是否已經退出)
有些時候, 我們想運行的不是另一個文件, 而是本文件中的一部分代碼.該怎麼辦呢?
其實可是通過參數來控制a.php(做為現在的主流開發語言)來運行哪一段程序.
下面看一個例子:
//a.php(做為現在的主流開發語言)

php(做為現在的主流開發語言)代碼:--------------------------------------------------------------------------------
<?php(做為現在的主流開發語言)
function runThread()
{
$fp = fsockopen(localhost, 80, $errno, $errmsg);

fputs($fp, "GET /a.php(做為現在的主流開發語言)?act=b "); //這里的第二個參數是HTTP協議中規定的請求頭
//不明白的請看RFC中的定義

fclose($fp);
}
function a()
{
$fp = fopen(result_a.log, w);
fputs($fp, Set in . Date(h:i:s, time()) . (double)microtime() . " ");

fclose($fp);
}
function b()
{
$fp = fopen(result_b.log, w);
fputs($fp, Set in . Date(h:i:s, time()) . (double)microtime() . " ");

C. php怎樣多線程操作

其實就PHP而言,可以用2種方式來做:
(1)在PHP里使用shell_exec的函數,以shell的方式,啟動一個獨立的PHP腳本執行。這種方式,其實相當於在Web伺服器處理過程中,獨立起了一個shell進程處理你的任務。這里,需要特別注意的是shell_exec的伺服器安全,注意校驗參數,小心避免被帶入shell命令中。這個是比較容易實現的方式。
(2)使用PHP實現一個Server,監聽一個埠,為Web端提供服務。這里的實現方式有很多,通常要配合擴展,例如原生的pthread(多線程),開源擴展swoole等等。

D. php支持多線程嗎請詳細解說

PHP本身是多線程的腳本解釋器,但是腳本不是多線程,在Linux下可以通過子進程模擬多線程。

E. php多線程

以下都是轉載, 簡單說下, php是不支持多線程的。。。。

PHP語言本身是不支持多線程的. 總結了一下網上關於PHP模擬多線程的方法, 總的來說, 都是利用了PHP的好夥伴們本身所具有的多線程能力. PHP的好夥伴指的就是LINUX和APACHE啦, LAMP嘛.

另外, 既然是模擬的, 就不是真正的多線程. 其實只是多進程. 進程和線程是兩個不同的概念. 好了, 以下方法都是從網上找來的.

1. 利用LINUX操作系統

<?php
for ($i=0;$i<10;$i++) {
echo $i;
sleep(5);
}
?>

上面存成test.php, 然後寫一段SHELL代碼

#!/bin/bash
for i in 1 2 3 4 5 6 7 8 9 10
do
php -q test.php &
done

2. 利用fork子進程(其實同樣是利用LINUX操作系統)

<?php
declare(ticks=1);
$bWaitFlag = FALSE; /// 是否等待進程結束
$intNum = 10; /// 進程總數
$pids = array(); /// 進程PID數組
echo ("Startn");
for($i = 0; $i < $intNum; $i++) {
$pids[$i] = pcntl_fork();/// 產生子進程,而且從當前行之下開試運行代碼,而且不繼承父進程的數據信息
if(!$pids[$i]) {
// 子進程進程代碼段_Start
$str="";
sleep(5+$i);
for ($j=0;$j<$i;$j++) {$str.="*";}
echo "$i -> " . time() . " $str n";
exit();
// 子進程進程代碼段_End
}
}
if ($bWaitFlag)
{
for($i = 0; $i < $intNum; $i++) {
pcntl_waitpid($pids[$i], $status, WUNTRACED);
echo "wait $i -> " . time() . "n";
}
}
echo ("Endn");
?>

3. 利用WEB SERVER, PHP不支持多線程, APACHE可是支持的, 呵呵.

假設我們現在運行的是a.php這個文檔. 但是我在程式中又請求WEB伺服器運行另一個b.php

那麼這兩個文檔將是同時執行的.

<?php
function runThread()
{
$fp = fsockopen('localhost', 80, $errno, $errmsg);
fputs($fp, "GET /a.php?act=brnrn");
fclose($fp);
}
function a()
{
$fp = fopen('result_a.log', 'w');
fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");
fclose($fp);
}
function b()
{
$fp = fopen('result_b.log', 'w');
fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");
fclose($fp);
}
if(!isset($_GET['act'])) $_GET['act'] = 'a';
if($_GET['act'] == 'a')
{
runThread();
a();
}
else if($_GET['act'] == 'b') b();
?>

當然啦,也可以把需要多線程處理的部分交給JAVA去處理, 然後在PHP里調用, 哈哈.

<?php
system('java multiThread.java');
?>

F. PHP涓鐨勶紙浼錛夊氱嚎紼嬩笌澶氳繘紼嬶紵

鍒╃敤WEB鏈嶅姟鍣ㄦ湰韜鐨勫氱嚎紼嬫潵澶勭悊錛屼粠WEB鏈嶅姟鍣ㄥ氭¤皟鐢ㄦ垜浠闇瑕佸疄鐜板氱嚎紼嬬殑紼嬪簭銆



PHP涓涔熻兘澶氱嚎紼嬩簡錛岄偅涔堥棶棰樹篃鏉ヤ簡錛屾艱觸閭e氨鏄鍚屾ョ殑闂棰樸傛矙娌崇數鑴戝煿璁鐭ラ亾PHP鏈韜鏄涓嶆敮鎸佸氱嚎紼嬬殑錛屾墍浠ユ洿涓嶄細鏈変粈涔堝儚Java涓璼ynchronize鐨勬柟娉曚簡銆傞偅鎴戜滑璇ュ備綍鍋氬憿錛



1.灝介噺涓嶈塊棶鍚屼竴涓璧勬簮銆備互閬垮厤鍐茬獊銆備絾鏄鍙浠ュ悓鏃跺儚鏁版嵁搴撴搷浣溿傚洜涓烘暟鎹搴撴槸鏀鎸佸苟鍙戞搷浣滅殑銆傛墍浠ュ湪澶氱嚎紼嬬殑PHP涓涓嶈佸悜鍚屼竴涓鏂囦歡涓鍐欏叆鏁版嵁銆傚傛灉蹇呴』瑕佸啓鐨勮瘽錛岀敤鍒鐨勬柟娉曡繘琛屽悓姝ャ傚傝皟鐢╢lock瀵規枃浠惰繘琛屽姞閿佺瓑銆傛垨寤虹珛涓存椂鏂囦歡錛屽苟鍦ㄥ彟澶栫殑綰跨▼涓絳夊緟榪欎釜鏂囦歡鐨勬秷澶眞hile(file_exits('xxx'));榪欐牱灝辯瓑浜庤繖涓涓存椂鏂囦歡瀛樺湪鏃訛紝琛ㄧず鍏跺疄綰跨▼姝e湪鎿嶄綔銆傚傛灉娌℃湁浜嗚繖涓鏂囦歡錛岃存槑鍏跺畠綰跨▼宸茬粡閲婃斁浜嗚繖涓銆


2.灝介噺涓嶈佷粠runThread鍦ㄦ墽琛宖puts鍚庡彇榪欎釜socket涓璇誨彇鏁版嵁涔辨敼鑼勩傚洜涓鴻佸疄鐜板氱嚎鍝楀療紼嬶紝闇瑕佺殑鐢ㄩ潪闃誨炴ā寮忋傚嵆鍦ㄥ儚fgets榪欐牱鐨勫嚱鏁版椂絝嬪嵆榪斿洖銆傘傛墍浠ヨ誨啓鏁版嵁灝變細鍑洪棶棰樸傚傛灉浣跨敤闃誨炴ā寮忕殑璇濓紝紼嬪簭灝變笉綆楁槸澶氱嚎紼嬩簡銆備粬瑕佺瓑涓婇潰鐨勮繑鍥炴墠鎵ц屼笅闈㈢殑紼嬪簭銆傛墍浠ュ傛灉闇瑕佷氦鎹㈡暟鎹鏈鍚庡埄鐢ㄥ栭潰鏂囦歡鎴栨暟鎹涓瀹屾垚銆傚疄鍦ㄦ兂瑕佺殑璇濆氨鐢╯ocket_set_nonblock($fp)鏉ュ疄鐜般


璇翠簡榪欎箞澶氾紝鍊掑簳榪欎釜鏈夋病鏈夊疄闄呯殑鎰忎箟鍛錛熷湪浠涔堟椂鍊欓渶瑕佽繖縐嶇敤榪欑嶆柟娉曞憿錛


絳旀堟槸鑲瀹氱殑銆傚ぇ瀹剁煡閬撱傚湪涓涓涓嶆柇璇誨彇緗戠粶璧勬簮鐨勫簲鐢ㄤ腑錛岀綉緇滅殑閫熷害鏄鐡墮堛傚傛灉閲囧氳繖縐嶅艦寮忓氨鍙浠ュ悓鏃朵互澶氫釜綰跨▼瀵逛笉鍚岀殑欏甸潰榪涜岃誨彇銆



G. PHP 到底是單進程還是多進程

默認是單進程,可以支持多進程

閱讀全文

與php有多線程嗎相關的資料

熱點內容
程序員長發表情包 瀏覽:132
伺服器的ip寫在什麼位置的 瀏覽:394
程序員去培訓機構還是專科好 瀏覽:791
pythonvpn伺服器 瀏覽:180
崩壞三如何安卓玩ios服 瀏覽:127
php消息發布 瀏覽:47
單片機jnz 瀏覽:150
ctex寫著寫著出現編譯錯誤 瀏覽:499
方舟編譯器多國語言 瀏覽:40
python主流編譯器 瀏覽:390
懷爾德pdf 瀏覽:388
程序員p1到p1的劃分 瀏覽:512
android演算法數據結構 瀏覽:370
什麼公司需要程序員 瀏覽:1000
壓縮機工作不正常 瀏覽:304
騰訊雲伺服器32核32g 瀏覽:635
自製壓縮機電冰箱 瀏覽:397
炸mc伺服器的人地址 瀏覽:390
滑鼠滑輪怎麼點開文件夾 瀏覽:154
安卓如何連接電腦 瀏覽:460