PHP多线程(pthreads)参数传递学习笔记
发布:smiling 来源: PHP粉丝网 添加日期:2014-06-27 10:57:17 浏览: 评论:0
PHP多线程编程中可以通过Thread,Worker的构造方法传递变量到线程,也可以通过线程的public属性或public方法实现,经研究发现都是通过serialize()和unserialize()实现传递,这样就会造成几个问题:
测试环境:OS: win7 64、PHP: 5.4.25 ts、pthreads: 0.1.0
1.性能问题
2.PDO等某些类型不能serialize所以就不能传递到线程,这两个问题是能通过其他凡是解决的,解决方法仁者见仁智者见智.
另外.可以通过传递匿名函数到线程中.但是有个bug.匿名函数不能赋值给线程中的属性.导致传递的匿名函数只能在线程的构造方法中才能使用(call_user_fun*系列函数调用).
Thread属性定义一定要注意必须在构造方法中初始化,否则必定为null,__construct()和run()里面的代码不在一个次元,如果属性不是PHP标量在run()中不能修改,例如构造方法中初始化一个对象,然后run()中修改对象属性不会生效.
正确写法如下:
- abstract class Task extends Thread {
- private $finished;
- public $terminated;
- protected $id;
- public $terminate;
- public function __construct($id) {
- $this->id = $id;
- $this->terminated = true;
- $this->finished = false;
- $this->terminate = false;
- }
- }
错误写法如下:
- abstract class Task extends Thread {
- private $finished=false;
- public $terminated=false;
- protected $id;// www.phpfensi.com
- public $terminate=false;
- public function __construct($id) {
- $this->id = $id;
- }
- }
这样也是错的,无论stdClass还是数组,代码如下:
- abstract class Task extends Thread {
- private $info;
- public function __construct($task) {
- $this->info = array();
- $this->info ['task'] = $task;
- $this->info ['finished'] = false;
- $this->info ['terminate'] = false;
- $this->info ['terminated'] = false;
- $this->info ['error'] = false;
- $this->info ['info'] = array ();
- }
- }
后来研究又发现,复合类型的数据整体赋值貌似能起作用,如果程序有很多回调函数在线程内部用的话就是找死啊.
Tags: 线程 参数 笔记
相关文章
- ·PHP线程安全和非线程安全版本的区别(2013-12-08)
- ·PHP Curl多线程实现原理与实例详解(2014-01-09)
- ·php中CURL实现多线程的笔记(2014-06-18)
- ·php多线程thread开发与应用的例子(2014-06-25)
- ·PHP多线程(pthreads)与自动加载BUG问题(2014-08-27)
- ·php多线程抓取信息测试例子(2014-08-27)
- ·PHP多线程的实现方法详解(2014-08-27)
- ·PHP中实现异步调用多线程程序代码(2014-08-28)
- ·php多线程的几点思考(2015-04-08)
- ·php基于Socket实现多线程开发教程(2015-04-15)
- ·php异步多线程swoole使用实例程序(2015-04-15)
- ·PHP多线程pthreads使用例子(2015-12-24)
- ·PHP多进程之pcntl_fork的实例详解(2018-09-13)
- ·php curl_multi 多线程查询的例子(2018-09-16)
- ·php多线程并发是怎么实现的(2018-09-18)
- ·PHP多线程模拟实现秒杀抢单(2018-10-11)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)