怎么在PHP中使用工人和池

  介绍

今天就跟大家聊聊有关怎么在PHP中使用工人和游泳池,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

& lt; PHP ?//创建自定义类工作,工作给取个名字,方便查看   class  Work  extends 工人   {   private 才能;$名称;      public 才能;function  __construct(名称)   {才能   ,,,这个→美元name =,美元名称;   ,,}      public 才能;function  getName ()   {才能   ,,,return  $ this→名称;   ,,}   }      class  Task  extends 线程   {   private 才能,num美元;      public 才能;function  __construct (num美元)   {才能   ,,,这个→美元num =, num美元;   ,,}      public 才能;function 运行()   {才能   ,,,//计算累加和   ,,,total 美元;=,0;   ,,,for ($小姐:=,0;,美元小姐:& lt;,这→美元num;,我+ +美元),{   ,,,,,total 美元;+=,我美元;   ,,,}   ,,,echo “work :, {$ this→工人→getName ()}, task :,{$总},\ n";   ,,,睡眠(1);   ,,}   }//创建一个工人线程   $ work =, new 工作(& # 39;一个# 39;);      工作→美元开始();      for ($小姐:=1;祝福;美元小姐:& lt;=, 10;,我+ +美元),{//将任务才能对象压栈到工人线程中//这才能个时候任务对象就可以使用工人线程上下文(变量,函数等)   美元才能工作→堆栈(new 任务(i)美元);   }//循环的清理任务,会阻塞主线程,直到栈中任务都执行完毕   while ($工作→收集()),;//关闭工人   美元工作→关闭();

上面代码在运行的时候,计算结果会每隔一秒出来一条,也就是10个任务对象是运行在1个工人线程上的。

如果10个任务对象是分别在独立空间运行的,睡眠()函数就不会起作用,他们各自的睡眠并不会影响其他线程。

怎么在PHP中使用工人和池”> </p> <p>把上面的代码修改一下:</p> <pre类= & lt; PHP ?//创建自定义类工作,工作给取个名字,方便查看   class  Work  extends 工人   {   private 才能;$名称;      public 才能;function  __construct(名称)   {才能   ,,,这个→美元name =,美元名称;   ,,}      public 才能;function  getName ()   {才能   ,,,return  $ this→名称;   ,,}   }      class  Task  extends 线程   {   private 才能,num美元;      public 才能;function  __construct (num美元)   {才能   ,,,这个→美元num =, num美元;   ,,}      public 才能;function 运行()   {才能   ,,,//计算累加和   ,,,total 美元;=,0;   ,,,for ($小姐:=,0;,美元小姐:& lt;,这→美元num;,我+ +美元),{   ,,,,,total 美元;+=,我美元;   ,,,}   ,,,echo “work :, {$ this→工人→getName ()}, task :,{$总},\ n";   ,,,睡眠(1);   ,,}   }//创建二个工人线程   $ work1 =, new 工作(& # 39;一个# 39;);   $ work2 =, new 工作(& # 39;b # 39;);      美元work1→开始();   美元work2→开始();      for ($小姐:=1;祝福;美元小姐:& lt;=, 10;,我+ +美元),{   if 才能;(=$小姐:& lt; 5), {   ,,,美元work1→堆栈(new 任务(i)美元);   ,,},{else    ,,,美元work2→堆栈(new 任务(i)美元);   ,,}   }//循环的清理任务,会阻塞主线程,直到栈中任务都执行完毕   while (美元work1→收集(),| |,美元work2→收集()),;//关闭工人   美元work1→关闭();   美元work2→关闭();

这里我们创建2个工人线程,让10个任务对象分别压栈到2个工人中。

这时可以看的到,计算结果是一对一对的出来,说明10个任务对象跑在了2个工人线程上。

怎么在PHP中使用工人和池”> </p> <p>至于需要创建多少个工人线程,和多少个任务对象,就看自已的需求了。</p> <p>工人还有一个好处就是可以重用工人中的对象和方法。我们可以在工人中创建一个连接数据库对象,方便各任务调用。</p> <pre类= & lt; PHP ?   class  DB  extends 工人   {//才能注意这里设置为静态成员,pdo连接本身是不能在上下文中共享的//声才能明为静态成员,让每个工人有自已的pdo连接   private 才能;static  db 美元;=,空;   public 才能;msg 美元;=,& # 39;小姐:得到db # 39;;      public 才能;function 运行()   {才能   ,,,self:: $ db =, new  PDO (& # 39; mysql:主机=192.168.33.226;港口=3306;dbname=测试;charset=use utf8 # 39;,, & # 39;根# 39;,,& # 39;& # 39;);   ,,}      public 才能;function  getDb ()   {才能   ,,,return 自我::$ db;   ,,}   }      class  Task  extends 线程   {   private 才能;$ id;//才能注意,这里不要给成员设置默认值,结果成美元员是线程对象是不可变的,不能被改写   private 才能;美元的结果;      public 才能;function  __construct ($ id)   {才能   ,,,这个→美元id =, $ id;   ,,}      public 才能;function 运行()   {才能   ,,,//获取工人中的数据库连接   ,,,db 美元;=,$ this→工人→getDb ();   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在PHP中使用工人和池