首页 > 开发 > PHP > 正文

PHP使用Pthread实现的多线程操作实例

2024-05-04 23:40:21
字体:
来源:转载
供稿:网友

这篇文章主要介绍了PHP使用Pthread实现的多线程操作的方法,以完整实例形式分析了php多线程的创建及使用相关技巧,需要的朋友可以参考下

本文实例讲述了PHP使用Pthread实现的多线程操作。分享给大家供大家参考,具体如下:

 

 
  1. <?php  
  2. class vote extends Thread { 
  3. public $res = ''
  4. public $url = array(); 
  5. public $name = ''
  6. public $runing = false
  7. public $lc = false
  8. public function __construct($name) { 
  9. $this->res = '暂无,第一次运行.'
  10. $this->param = 0; 
  11. $this->lurl = 0; 
  12. $this->name = $name; 
  13. $this->runing = true
  14. $this->lc = false
  15. public function run() { 
  16. while ($this->runing) { 
  17. if ($this->param != 0) { 
  18. $nt = rand(1, 10); 
  19. echo "线程[{$this->name}]收到任务参数::{$this->param},需要{$nt}秒处理数据./n"
  20. $this->res = rand(100, 999); 
  21. sleep($nt); 
  22. $this->lurl = $this->param; 
  23. $this->param = ''
  24. else { 
  25. echo "线程[{$this->name}]等待任务../n"
  26. sleep(1); 
  27. //这里创建线程池. 
  28. $pool[] = new vote('a'); 
  29. $pool[] = new vote('b'); 
  30. $pool[] = new vote('c'); 
  31. //启动所有线程,使其处于工作状态 
  32. foreach ($pool as $w) { 
  33. $w->start(); 
  34. //派发任务给线程 
  35. for ($i = 1; $i < 10; $i++) { 
  36. $worker_content = rand(10, 99); 
  37. while (true) { 
  38. foreach ($pool as $worker) { 
  39. //参数为空则说明线程空闲 
  40. if ($worker->param=='') { 
  41. $worker->param = $worker_content; 
  42. echo "[{$worker->name}]线程空闲,放入参数{$worker_content},上次参数[{$worker->lurl}]结果[{$worker->res}]./n"
  43. break 2; 
  44. sleep(1); 
  45. echo "所有线程派发完毕,等待执行完成./n"
  46. //等待所有线程运行结束 
  47. while (count($pool)) { 
  48. //遍历检查线程组运行结束 
  49. foreach ($pool as $key => $threads) { 
  50. if ($worker->param=='') { 
  51. echo "[{$threads->name}]线程空闲,上次参数[{$threads->lurl}]结果[{$threads->res}]./n"
  52. echo "[{$threads->name}]线程运行完成,退出./n"
  53. //设置结束标志 
  54. $threads->runing = false
  55. unset($pool[$key]); 
  56. echo "等待中.../n"
  57. sleep(1); 
  58. echo "所有线程执行完毕./n"

希望本文所述对大家php程序设计有所帮助。


注:相关教程知识阅读请移步到PHP教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表