PHP pthreads 多线程 并发 的一些实践 总结
2014-05-16 20:02
363 查看
1.Windows下安装很成问题,版本库对应不全,比如我是Win7 64位系统,PHP 5.4 结果没有对应的包, 只能开了个虚拟机,win7x32+PHP5.3 装上了.
2.要注意: 线程的实现代码 写在run方法中, 但启动线程的方法是start, 千万不要直接调用 run ,(这就变成了单线程)
3.如果可以,先实例出所有线程,再循环一次,逐一Start
4.线程中,SPL相关函数失效,最主要的是 spl_register_autoload , 这导致自动加载失效. 我的解决方案是 在未启动线程时,先把需要的类都加载.
5.pthreads 有个版本问题, 手册 上的大部分 类和方法都要求 2.0.0以上 , 我们运维最初安装的居然是0.4.4
6.我写了一个多线程+异步的采集程序. 花了一周,写了5个网站的采集.
给大家个出人意料的结论吧:
-------暂时还是先别用这个东西了,生产环境中有许多问题
1.频繁出现 memory leak
2.遇到一个古怪问题: 线程中 创建一个对象,构造时给对象的属性赋值,再回去取,值没了~~~ , 此问题不是必现的 (与时间无关,与代码相关), 我专门写了个测试例子,没出错.
3.最初我采用了纯 多线程 写了采集(不使用异步), 效率不好. 之后 我换了组合方式.
4.下周的工作,我要把线程这部分干掉,太不稳定了.采集就用异步就好.
吐个槽:有的程序员居然无法区分 异步与并发.
补充:
经过调试,以上问题2,已经解决,框架中另一个位置的一个隐藏BUG导致.
虚拟机上运行良好,尚未到服务器上运行.
2.要注意: 线程的实现代码 写在run方法中, 但启动线程的方法是start, 千万不要直接调用 run ,(这就变成了单线程)
3.如果可以,先实例出所有线程,再循环一次,逐一Start
4.线程中,SPL相关函数失效,最主要的是 spl_register_autoload , 这导致自动加载失效. 我的解决方案是 在未启动线程时,先把需要的类都加载.
5.pthreads 有个版本问题, 手册 上的大部分 类和方法都要求 2.0.0以上 , 我们运维最初安装的居然是0.4.4
6.我写了一个多线程+异步的采集程序. 花了一周,写了5个网站的采集.
给大家个出人意料的结论吧:
-------暂时还是先别用这个东西了,生产环境中有许多问题
1.频繁出现 memory leak
2.遇到一个古怪问题: 线程中 创建一个对象,构造时给对象的属性赋值,再回去取,值没了~~~ , 此问题不是必现的 (与时间无关,与代码相关), 我专门写了个测试例子,没出错.
3.最初我采用了纯 多线程 写了采集(不使用异步), 效率不好. 之后 我换了组合方式.
4.下周的工作,我要把线程这部分干掉,太不稳定了.采集就用异步就好.
吐个槽:有的程序员居然无法区分 异步与并发.
补充:
经过调试,以上问题2,已经解决,框架中另一个位置的一个隐藏BUG导致.
虚拟机上运行良好,尚未到服务器上运行.
相关文章推荐
- PHP pthreads 多线程 并发 的一些实践 总结
- Java多线程学习-并发编程实践基本概念总结整理
- Java中关于同步,异步,多线程,多线程同步,并发,并行的一些总结
- 用源码包安装php-4.34+mysql-4.0.16+apache-2.0.48+vbb-2.32实践总结
- PHP开发的一些注意点总结
- PHP 操作文件的一些FAQ总结
- PHP 操作文件的一些FAQ总结
- 金万钠说:“上面写的都是我想到的自己觉得比较重要的一些地方,还有很多细节是需要在实践中慢慢摸索和总结的。”
- 关于运行Drupal 7的Nginx+PHP系统设置的一些问题解决方案总结
- php连接mssql的一些方法总结
- 关于PHP一些编译安装出现的错误总结
- 阅读《Programming Pearls second Edition》后的一些总结和个人实践的套用
- 关于PHP操作文件的一些FAQ总结
- 总结的一些PHP开发中的tips
- php一些错误处理和技巧总结
- PHP开发的一些注意点总结
- 关于PHP操作文件的一些FAQ总结
- 关于一些学习php的总结
- 多线程的一些总结
- phpmailer发邮件常见的一些问题总结