php Pthread 多线程 (二) Worker和Threaded
2017-01-17 20:07
399 查看
<?php //Worker是具有持久化上下文(执行环境)的线程对象 //Worker对象start()后,会执行run()方法,run()方法执行完毕,线程也不会消亡 class MySqlWorker extends Worker { private $name = ''; private $db = null; public function __construct($name) { $this->name = $name; } public function run() { $this->db = mysql_connect('127.0.0.1', 'root', ''); mysql_select_db('test', $this->db); } public function getDb() { return $this->db; } } //Stackable是Threaded的一个别称,直到pthreads v.2.0.0 class Query extends Threaded { private $sql = ''; private $data = array(); public function __construct($sql) { $this->sql = $sql; } public function run() { //访问线程工作对象 $db = $this->worker->getDb(); $res = mysql_query($this->sql, $db); $tmp = array(); while($row = mysql_fetch_assoc($res)) { //这里不能使用$this->data[] = $row;这种方式。 $tmp[] = $row; } $this->data = $tmp; } public function getData() { return $this->data; } } $mysqlWork = new MySqlWorker('mysqlWork'); $query1 = new Query('select * from test order by id limit 0,2'); $query2 = new Query('select * from test order by id limit 2,2'); //通过Worker的stack方法,我们把对象加入到Worker中 //会激活Worker执行对象的run()方法。 //说白了就是会执行$query1,$query2的run()方法。 $mysqlWork->stack($query1); $mysqlWork->stack($query2); $mysqlWork->start(); //执行完Worker中的对象后,关闭Worker。 //如果把这段代码放到$query1->getData()和$query2->getData()之后 //则会输出两个空数组,那该方法的作用有可能是等待Worker中对象执行完毕,类似join方法()。 $mysqlWork->shutdown(); var_dump($query1->getData()); var_dump($query2->getData());
Worker对象与Threaded对象的关系有点像是,船在河中运行,一条河里有很多条船,而河也不止一条。不同的船运行在特定的环境下,比如大吨位的船是无法运行在河床浅的河中。船是可以随时变化的,而河的环境确相对持久。我们通过stack方法把对象加入到Worker中,在对象的run方法中通过对worker的访问来获取信息。
相关文章推荐
- PHP 多线程测试 –Pthread
- PHP使用Pthread实现的多线程操作实例
- PHP Pthread多线程 操作
- PHP使用Pthread实现的多线程操作实例
- php Pthread 多线程 (三) Mutex 互斥量
- php Pthread 多线程 (四) 共享内存
- PHP Pthread多线程 操作
- php Pthread 多线程 (五) 线程同步
- php 多线程 worker 类中的 collect方法
- pthread PHP多线程环境部署过程摘要
- PHP Pthread多线程 操作
- php Pthread 多线程 (六) Pool类 线程池
- php Pthread 多线程 (一) 基本介绍
- 多线程的pthread_cond_wait后,记住再次检测条件
- php实现多线程,实际是多进程跨平台
- 使用pthread库进行多线程编程2 - UNIX高级环境编程第12章读书笔记
- [转]PHP中的(伪)多线程与多进程
- PHP中的(伪)多线程与多进程
- 使用pthread库进行多线程编程1 - UNIX环境高级编程第11章读书笔记
- BackgroundWorker .net 2.0 里微软的多线程组件 学习 Cross-thread operation not valid: Control 'RichTextBox1' accessed from a thread other than the thread it was created on.