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

php是多線程嗎

發布時間:2022-08-06 16:29:42

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

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

⑵ PHP 到底是單進程還是多進程

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

⑶ 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');
?>

⑷ 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');
?>

⑸ php多線程如何實現的

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();
?>

⑹ php能不能開線程的

不能,php本身是不支持多線程的,或者說沒有多線程的概念。如果非要開線程的話,可以藉助linux的縣城概念,來模擬多線程。

⑺ php真的有多進程,多線程嗎

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

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

⑻ php 多線程

不算
php多線程一般指開發方面做的

⑼ php是單線程單進程的么

每個PHP文件的執行是單線程的,但是,伺服器(apache/nigix/php-fpm)是多線程的。每次對某個PHP文件的訪問伺服器都會創建一個新的進程/線程,用來執行對應的PHP文件.

⑽ 用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() . " ");

閱讀全文

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

熱點內容
客戶端框架源碼 瀏覽:206
python自動辦公能幹嘛 瀏覽:873
程序員追愛 瀏覽:252
程序員邏輯故事 瀏覽:768
加密icsot23i2c 瀏覽:713
你們有什麼好的解壓軟體 瀏覽:607
常州空氣壓縮機廠家 瀏覽:241
安卓如何關閉app內彈出的更新提示 瀏覽:409
e4a寫的app怎麼裝蘋果手機 瀏覽:201
海立壓縮機海信系 瀏覽:210
社保如何在app上合並 瀏覽:220
小米加密照片後綴 瀏覽:236
我的世界網易手機怎麼創伺服器 瀏覽:978
載入單頁源碼 瀏覽:930
阿里雲伺服器seo 瀏覽:777
海洋斗什麼時候上線安卓 瀏覽:86
中行app如何查每日匯款限額 瀏覽:840
輸入伺服器sn是什麼意思 瀏覽:725
sha1演算法java 瀏覽:90
asp代碼壓縮 瀏覽:851