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

2021-07-27 13:50:02 字數 2620 閱讀 1859

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

一、php模擬實現多執行緒的三種方法

1、linux下的php多執行緒

下面所講的東西是源自php的pcntl_fork函式.因為這個函式依賴作業系統fork的實現,所以本文所講的東西只適用於linux/unix。那麼先看看這個函式的用法吧.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 方式

function sendstream() 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、通過多程序代替多執行緒

function daemon(fu

ncna

me, args,

number)

}else

}else

exit();

}} } function worker($args)

daemon(『worker』,array(1),2);

二、真正實現php多執行緒的方法

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

php擴充套件

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

php多執行緒

cd /tools

wget

unzip v2.0.10.zip

cd pthreads-2.0.10

/usr/local/php/bin/phpize

./configure –with-php-config=/usr/local/php/bin/php-config

make

make install

注意:您的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.假定工廠的電力有限,一次只能供給乙個車間使用。也就...