可以在PHP中进行多线程
是的,您可以使用pthreads在PHP中执行多线程
从PHP文档:
pthreads是一个面向对象的API,它提供了PHP中多线程所需的所有工具。PHP应用程序可以创建,读取,写入,执行并与线程,辅助对象和线程对象同步。
警告:pthreads扩展名不能在Web服务器环境中使用。因此,PHP中的线程应仅保留给基于CLI的应用程序使用。
简单测试
#!/usr/bin/php<?phpclass AsyncOperation extends Thread { public function __construct($arg) { $this->arg = $arg; } public function run() { if ($this->arg) { $sleep = mt_rand(1, 10); printf('%s: %s -start -sleeps %d' . "n", date("g:i:sa"), $this->arg, $sleep); sleep($sleep); printf('%s: %s -finish' . "n", date("g:i:sa"), $this->arg); } }}// Create a array$stack = array();//Initiate Multiple Threadforeach ( range("A", "D") as $i ) { $stack[] = new AsyncOperation($i);}// Start The Threadsforeach ( $stack as $t ) { $t->start();}?>
第一次运行
12:00:06pm: A -start -sleeps 512:00:06pm: B -start -sleeps 312:00:06pm: C -start -sleeps 1012:00:06pm: D -start -sleeps 212:00:08pm: D -finish12:00:09pm: B -finish12:00:11pm: A -finish12:00:16pm: C -finish
第二次跑
12:01:36pm: A -start -sleeps 612:01:36pm: B -start -sleeps 112:01:36pm: C -start -sleeps 212:01:36pm: D -start -sleeps 112:01:37pm: B -finish12:01:37pm: D -finish12:01:38pm: C -finish12:01:42pm: A -finish
现实世界的例子
error_reporting(E_ALL);class AsyncWebRequest extends Thread { public $url; public $data; public function __construct($url) { $this->url = $url; } public function run() { if (($url = $this->url)) { $this->data = file_get_contents($url); } else printf("Thread #%lu was not provided a URLn", $this->getThreadId()); }}$t = microtime(true);$g = new AsyncWebRequest(sprintf("http://www.google.com/?q=%s", rand() * 10));if ($g->start()) { printf("Request took %f seconds to start ", microtime(true) - $t); while ( $g->isRunning() ) { echo "."; usleep(100); } if ($g->join()) { printf(" and %f seconds to finish receiving %d bytesn", microtime(true) - $t, strlen($g->data)); } else printf(" and %f seconds to finish, request failedn", microtime(true) - $t);}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)