<?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的访问来获取信息。

转载于:https://www.cnblogs.com/jkko123/p/6294596.html

php Pthread 多线程 (二) Worker和Threaded相关推荐

  1. pthread多线程编程的学习小结

    pthread多线程编程的学习小结 pthread 同步3种方法: 1 mutex 2 条件变量 3 读写锁:支持多个线程同时读,或者一个线程写 程序员必上的开发者服务平台 -- DevStore p ...

  2. clone的fork与pthread_create创建线程有何不同pthread多线程编程的学习小结(转)

    进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合,这些资源在Linux中被抽 象成各种数据对象:进程控制块.虚存空间.文件系统,文件I/O.信号处理函数.所以创建一个进程的 过程就是这 ...

  3. clone的fork与pthread_create创建线程有何不同pthread多线程编程的学习小结

    进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合,这些资源在Linux中被抽 象成各种数据对象:进程控制块.虚存空间.文件系统,文件I/O.信号处理函数.所以创建一个进程的 过程就是这 ...

  4. Pthread多线程编程之查看Pthread版本的方法

    Pthread多线程编程之查看Pthread版本的方法: getconf GNU_LIBPTHREAD_VERSION [root@localhost Workspace]# getconf GNU_ ...

  5. Qt-Creator编译pthread多线程程序的方法

    因为phread属于第三方库,需要在Qt项目的pro文件中添加一行: LIBS += -pthread 至此,Qt-Creator顺利编译pthread多线程程序,大功告成...

  6. Java读书笔记(4)-多线程(二)

    Java读书笔记(4)-多线程(二) 2016-1-2 线程通信 传统的线程通信 Object类提供了wait(),notify()和notifyAll三个方法 适用情况:synchronized修饰 ...

  7. pthread多线程库下载

    pthread多线程库下载地址:ftp://sourceware.org/pub/pthreads-win32 用Edge浏览器貌似进不去

  8. pthread多线程资源回收策略

    在写网络服务器程序时可能需要实现多线程接收多个客户端的数据,我实现方式比较傻,死循环等待client的connect,connect之后创建thread,这样其实有一个问题,服务器程序需要长期运行,长 ...

  9. 在windows下配置pthread多线程

    Pthread是由POSIX提出的一套通用的线程库,在linux平台下,它被广泛的支持,而windows平台下,却并不被支持,而pthreads-w32为我们提供了解决方案,本文我们准备在我们的win ...

最新文章

  1. Mavlink自定义协议
  2. python处理json数据 乱码报错_python操作mysql中文显示乱码的解决方法
  3. 131. 分割回文串(回溯算法)
  4. excel公式:定位单元格
  5. 输入正方形对角线两个端点坐标,求中点坐标
  6. ABAP Development Tools的语法增强
  7. Unicode汉字编码
  8. Spring事务管理(注解式声明事务管理)备忘
  9. 【转载】堆和栈的内存分配
  10. 为什么房间的 Wi-Fi 信号这么差
  11. 基于numpy科学计算库实现线性回归linear regression
  12. 发那科服务器显示021,发那科FANUC机器人示教器启动黑屏无显示当天修好故障
  13. 软件设计师真题及解析
  14. 查看ASA日志服务器信息,ASA 日志管理
  15. 互联网金融的普惠之道
  16. 收藏 40 2 CPD (广告合作方式)
  17. 使用Frida hook 获取native层代码的返回值
  18. python打印七段数码管引脚图_前辈学51单片机的感悟是怎么样的?说说看
  19. WPA渗透-使用airolib-ng创建彩虹表加速
  20. 【总结】利用AWS搭建混合云的架构

热门文章

  1. ropgadgets与ret2syscall技术原理
  2. 6.824 MapReduce lab1 2020(一)
  3. linux之多线程(1)
  4. 软件工程---07.设计与实现
  5. 834 树中距离之和
  6. Python3 面向对象程序设计
  7. Linux经典问题—五哲学家就餐问题
  8. OpenCV基础知识 图像
  9. 【Linux】Ubuntu 18下安装Vim自动补全插件YouCompleteMe(可高速下载安装)
  10. 北理工爬虫课程学习记录