zoukankan      html  css  js  c++  java
  • php Pthread 多线程 (二) Worker和Threaded

    <?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());
    
    php Thread 多线程 Worker和Threaded - 怀素真 - 因上努力 果上随缘
     
    Worker对象与Threaded对象的关系有点像是,船在河中运行,一条河里有很多条船,而河也不止一条。不同的船运行在特定的环境下,比如大吨位的船是无法运行在河床浅的河中。船是可以随时变化的,而河的环境确相对持久。我们通过stack方法把对象加入到Worker中,在对象的run方法中通过对worker的访问来获取信息。
  • 相关阅读:
    JSTL标签用法
    (转)javascript正则实战
    Spring中几种数据源的配置
    (转)常用正则表达式
    EL表达式详解
    JAVA环境变量配置(转)
    S2SH整合步骤
    正则表达式30分钟教程(转)
    在Flash Player 10.2中使用原生鼠标指针
    time
  • 原文地址:https://www.cnblogs.com/jkko123/p/6294596.html
Copyright © 2011-2022 走看看