通俗易懂的php多執行緒解決方案

2022-02-12 11:11:25 字數 2572 閱讀 1570

我們在做專案的時候,有些需求,特別是資料的響應處理需要花費大量的時間,由於php是乙個短生命週期的指令碼語言,到了預設的30秒,php的資料處理還沒完成,php的生命週期就結束了。這時需要使用非同步併發處理策略,也就是說,一次php呼叫可以發出的多個請求,這些請求不是按照順序執行,而是可以非同步併發執行的,一些請求用於在後台處理資料,一些請求用於接受後台響應狀態,根據狀態,與使用者做一些簡單的互動。但是問題來了,我們都知道php本身是不支援多執行緒的,那麼應該怎麼實現php的多執行緒呢?

1、linux下的php多執行緒

下面所講的東西是源自php的pcntl_fork函式.因為這個函式依賴作業系統fork的實現,所以本文所講的東西只適用於linux/unix。那麼先看看這個函式的用法吧.php手冊上是這麼說的:

<?php 

$pid = pcntl_fork();

if ($pid == -1) else if ($pid) else

?>

通過pcntl_fork建立乙個子程序,如果返回值是-1的話,那麼說明子程序建立失敗.建立成功的程序id會返回給父程序,0返回給子程序.不好理解吧,所以應該這樣寫:

<?php 

$pid = pcntl_fork();

if($pid == -1)

else

else

}?>

這樣一改好理解多了,如果你父程序希望知道子程序正常退出的話,可以加上前面的pcntl_wait。

2.通過stream_socket_client 方式

functionsendstream() else   

$data = json_encode($send_data[$k]['body']);

$s = stream_socket_client($host . ":80", $errno, $errstr, $timeout, stream_client_async_connect | stream_client_connect);

if ($s) else

} while (count($sockets)) else

} } else

} print_r($result);

}

3、通過多程序代替多執行緒

functiondaemon($func_name,$args,$number)elseif($pid)  

}else

}else

exit();

} }

} functionworker($args)

daemon('worker',array(1),2);

php真正的多執行緒實現方式,通過安裝php的擴充套件 pthread 可以做到。

然後重新整理的頁面如下,拖到最底部:

注意:您的php 在編譯的時候需要開啟 –enable-maintainer-zts

./configure --prefix=/usr/local/php --disable-fileinfo   --enable-fpm --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-openssl --with-zlib --with-curl --enable-ftp --with-gd --with-xmlrpc  --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-gd-native-ttf --enable-mbstring --with-mcrypt=/usr/local/libmcrypt --enable-zip --with-mysql=/usr/local/mysql --without-pear --enable-maintainer-zts
vim /etc/php.ini 

新增extension=pthreads.so

重啟php  

/etc/init.d/php-fpm restart

通俗易懂的php多執行緒解決方案

我們在做專案的時候,有些需求,特別是資料的響應處理需要花費大量的時間,由於php是乙個短生命週期的指令碼語言,到了預設的30秒,php的資料處理還沒完成,php的生命週期就結束了。這時需要使用非同步併發處理策略,也就是說,一次php呼叫可以發出的多個請求,這些請求不是按照順序執行,而是可以非同步併發...

通俗易懂的php多執行緒解決方案

我們在做專案的時候,有些需求,特別是資料的響應處理需要花費大量的時間,由於php是乙個短生命週期的指令碼語言,到了預設的30秒,php的資料處理還沒完成,php的生命週期就結束了。這時需要使用非同步併發處理策略,也就是說,一次php呼叫可以發出的多個請求,這些請求不是按照順序執行,而是可以非同步併發...

通俗易懂的程序與執行緒解釋

程序 process 和執行緒 thread 是作業系統的基本概念,但是它們比較抽象,不容易掌握。最近,我讀到一篇材料,發現有乙個很好的模擬,可以把它們解釋地清晰易懂。1.計算機的核心是cpu,它承擔了所有的計算任務。它就像一座工廠,時刻在執行。2.假定工廠的電力有限,一次只能供給乙個車間使用。也就...