有人用过PHP5的threads库吗?可以让PHP像JAVA一样支持可控的多线程编程,实现高性能计算,希望版主置顶讨论
在PHP5的下载链接下面有一个pecl-5.0.2-Win32.zip的包,里面有一个threads扩展库,使用它可以实现JAVA类似的多线程计算,这样PHP终于可以充分利用多CPU服务器的运算能力,做大型应用开发了!
以前没发现PHP提供下载PHP5下的PECL扩展库之前,我从cvs.php.net的pecl目录中下载过它的源代码,并自己编译在PHP4下做过测试,确实在我的双CPU服务器下一个PHP.exe进程可以占用98%的CPU,而不使用多线程并行运算,最高也不可能超过50%,速度也快了一倍(理论上使用并行运算时增加一个CPU就可以提高一倍)。而且可以用程序独立控制每个线程的进行。
在cvs.php.net里的源代码中有几个测试程序,大家可以调试一下试试。
但不管是PHP5提供的包还是我自己编译的,在我这里都有一个问题:就是有些函数可用而有些不可用,也会导致一些普通PHP的功能一直输出不了结果。最直接的表现就是执行phpinfo()函数时页面最后有一点地方要相当长时间才会显示出来,但那段时间之内CPU占用率非常低,感觉像是被控制了执行时间,被延迟执行了。
大家可不可以发动一下一起研究研究?或是如果是它的BUG那有高手是否可以改进一下?我看过,它的代码并不多。
这是PHP走向大型应用非常重要的一个特性。比如在企业应用中,进行产品成本核算,要是上万种产成品和半成品(这在企业中已经算是很小的数量了)进行成本核算,用普通单线程方式可能需要几个小时才能完成计算。而且在单线程方式下用户希望通过购买有几十块CPU的高性能服务器来提高性能,都是没有任何作用的,因为单线程方式只能利用一块CPU的能力,单CPU与多CPU服务器的计算速度是一样的!!
而如果采用多线程编程,可以采用同时对几十种(或更高)产品并行计算的方法,各自的线程各自与数据库连接获取数据,并行处理,并在计算完成后自动发起下一个产品的计算。这样在多CPU情况下就可以用1/n(n为CPU数量)的时间完成计算。
这个特性将会为我们这些PHP开发者提供很大的发展机会,希望大家参与!
问题点数:0、回复次数:27Top
1 楼blazingSnow(月光飞闪刀剑吻)回复于 2004-11-25 11:57:21 得分 0
关注Top
2 楼hahawen(变态的大龄青年)回复于 2004-11-25 13:23:52 得分 0
就算是php可以支持多线程了, 但是对他的应用也不应该是你说的那样,
像你说的"进行产品成本核算,要是上............" 这些根本就不应该是用php来完成的任务.
个人认为php多线程的意义根本不大,Top
3 楼loveconan(放牛娃娃)回复于 2004-11-25 14:36:55 得分 0
PHP不可能实现高性能计算Top
4 楼syre(神仙)回复于 2004-11-25 15:41:37 得分 0
确实
这不是一种脚本语言擅长的Top
5 楼ezdevelop(phpsalon.com)回复于 2004-11-25 16:42:56 得分 0
虽然提供了threads扩展库,但PHP还算不上多线程的,跟系统等各方面有关系,国外有讨论的。Top
6 楼www0aspsun0com(源码联盟)回复于 2004-11-25 19:01:46 得分 0
不错,不是很懂,但是很感兴趣Top
7 楼wfqn()回复于 2004-11-26 08:40:57 得分 0
当然是多线程,你们可以实际测试一下,最直接的表现就是在系统中只有一个PHP进程的情况下,却在双CPU的服务器上占了90%以上的CPU。
这些线程的执行进度是可控的。所有这些只有你们实际测试了这个库才知道。
虽然PHP的效率远不如C/C++高,但跟JAVA一比还是可能的。
要不然PHP程序员将来的出路都转向JAVA?那开始学习PHP做什么?直接学JAVA不就得了?
再不然PHP程序员们做一辈子几乎没什么技术含量,只能拿低薪的网站程序开发者?
即使你是搞网站开发?如果一个网站的服务器CPU数量比较多,那用PHP根本就是对服务器的浪费!速度比JAVA使用多线程会慢非常多。谁会选择PHP?那我们这些PHPer的发展空间在哪里?
特别是电子商务网站现在越来越多,而且项目价格越来越低,那种利润较高的项目都会要求比较高的性能,靠一堆if可以吗?所以这种项目都被JAVA或是PHPer们都瞧不起的asp/asp.net拿走了。
研究它是为了我们自己!希望大家认真测试一下!Top
8 楼wfqn()回复于 2004-11-26 11:29:22 得分 0
高手们参与啊Top
9 楼erldy(我还是我)回复于 2004-11-26 11:44:43 得分 0
关注!!!Top
10 楼syre(神仙)回复于 2004-11-26 12:51:52 得分 0
谁说php程序员都要转向Java,只不过Java目前更为流行,多学一样多一点优势
php程序就没有技术含量吗??????Top
11 楼drifters(呵呵)回复于 2004-11-26 15:57:54 得分 0
关注Top
12 楼wfqn()回复于 2004-12-04 11:04:11 得分 0
但原来PHP对多线程支持不好,决定了它的一个进程只能利用一块CPU的能力,要用多CPU的能力必须用JAVA或.net之类的,跨平台的只有JAVA,所以当然出路只能转JAVA。
但现在有了threads库,PHP已经可以了,但它的稳定性确实有些问题,大家仔细研究一下不好吗?
在这里不是讨论PHP有没有前途,而是现在已经有一个非常好的解决PHP弱点的东西,为什么不好好研究呢?Top
13 楼wfqn()回复于 2004-12-04 11:09:40 得分 0
不过网站程序确实已经算不上有什么技术含量了,属于是人都会做的东西了。
那种非常高性能的网站往往前台有可能用PHP,但实际后台的处理很多用C之类的语言,大家必须正视这一点Top
14 楼surfchen(冲浪)回复于 2004-12-04 11:56:26 得分 0
对于threads库,我不了解,所以暂时也不想参与相关讨论,我只想对wfqn说几句话...
网站程序确实如你所说,“属于是人都会做的东西”..
当然,这个前提是hello world也算“网站程序”...
一个好的网站程序,人人都会做吗???
我看过网上很多的整站程序,很多都是设计地很粗糙的。
扩展性低,可读性差,难维护...
我学WEB设计以来,回头看看一段时间前做的程序,都感觉到大量设计(包括架构,具体代码实现)上缺陷...
我自认为我也算一个人,奇怪的是我并没有觉得我如你说所的——人人都会做站点程序..当然这个做在上一句话里并不等于做HELLO WORLD...
不过对这个帖子的讨论,我觉得还是有必要的....我也非常希望能见到PHP得到更大的发展.
Top
15 楼wfqn()回复于 2004-12-04 18:34:53 得分 0
我们公司是在完全用PHP做开发,开发的程序也是很大型的程序,有网站管理程序,也有大型的企业管理程序。
做网站相对简单,所以用PHP一直没什么问题,效率也还可以。但做企业管理软件系统中就遇到了一些PHP无法解决的性能瓶颈,没有对线程的支持也是其中之一。
所以很长时间以来,我们一直在怀疑选择PHP是不是选择错了,但已经花几年写了几十万行代码了,程序已经非常大,已经没有回头的机会。
我们考虑过用PHP跟JAVA结合开发,但PHP4调用JAVA的方式效率太低,实在没有什么利用价值,无法利用JAVA相对高的运算效率。现在唯一的方法是自己用C写PHP扩展库,但那样又存在C的跨平台编程困难的问题:各种不同的操作系统使用不同的线程机制与函数库,必须要为不同的操作系统写不同的模块,而且要在不同操作系统的不同运行环境下分别编译才能正常运行,这对于跨平台的通用软件来说简单是灾难!
现在来看,JAVA确实还是完美的。不知道PHP5对JAVA调用机制是不是有了改善?如果可以,我就可以考虑使用与JAVA混合编程的方式,将来逐渐转到完全用JAVA开发。
但我真的不想这么做,我们的所有开发人员对PHP真的是非常熟悉了,用了那么多年,已经有非常深的感情。有时也在想,PHP真的就这么差么?前段时间突然在cvs.php.net发现了那个PECL的threads扩展库,简直是一阵狂喜!
当时下载了threads的c源代码后,自己用VC编译成DLL后加载到PHP4的扩展中,运行测试结果发现确实是实现了真正的多线程!当时的感觉简单太棒了!但随后发现它带来了一些其它问题,那时以为是自己编译的方法不对。
后来又在php网站上看到了PHP5提供了编译好的二进制版本,兴冲冲地安装上,结果发现跟我自己居PHP4下编译的情况差不多。
我实在是无法忍受PHP这么重要的一个重大提高不能使用,如果这个问题解决了,我就不用再考虑更换JAVA的问题了,所以希望大家来一直研究一下,如果谁能解决,要我给多少分都可以,虽然我现在也只有2000来分了。Top
16 楼allkill(傲气游)回复于 2004-12-04 22:44:49 得分 0
解决这个问题是早晚的事,万事开头难嘛!Top
17 楼fzjw(冰凌尘埃)回复于 2004-12-05 00:23:25 得分 0
呵呵,我在php.ini中加入threads后,Apache2出错,看来,threads需要解决的问题还很多Top
18 楼loveconan(放牛娃娃)回复于 2004-12-05 02:09:14 得分 0
C才是正道
:DTop
19 楼leikaixin(星星男孩)回复于 2004-12-05 10:55:36 得分 0
对不起,还没有用php5.0
我还在用php4.3.12 哦,命苦啊Top
20 楼wfqn()回复于 2004-12-05 18:51:54 得分 0
这个threads库也是支持php4的,我本来就是为php4编译测试的。
哪位高手同时对C和PHP都熟悉啊?帮忙分析一下源代码,看看为什么会出现这种情况?
threads库的源代码并不多,很好读懂Top
21 楼jaexc(大飞)回复于 2004-12-05 19:38:12 得分 0
我是第一次听说这个threads库,都怪自己的E文不好的啊
以后有时间好好研究下,提高PHP水平。
其实如果平时C不精通和做的项目不多,那看到那些源码头都晕。Top
22 楼syre(神仙)回复于 2004-12-05 19:58:58 得分 0
对不起,还没有用php5.0
我还在用php4.3.12 哦,命苦啊
强
这个4.3.12是哪里找到的啊
php.net上才放出4.3.10rc1啊Top
23 楼lisoon(http://www.lisoon.com/FlashRss/)回复于 2004-12-05 20:53:22 得分 0
看来楼主对php的感情很深,说得都很中肯也很有理,希望楼主把应用心得写出来,给我们这些小辈学习,由于c语言不好,帮不了。
Top
24 楼unixdotnet(byopen)回复于 2004-12-06 09:56:07 得分 0
To wfqn():
请问你是不是奥玛的朋友?见识多了,我的体会也跟你相似,能否留个QQ号聊聊?我的是418935131Top
25 楼drifters(呵呵)回复于 2004-12-06 12:38:00 得分 0
继续关注Top
26 楼magicsnake(北极狐)回复于 2004-12-06 15:13:55 得分 0
如果楼主是做应用开发的,我觉得在一定的环境下选择一种合适的工具进行工作才是正道.楼主不能扬长避短,硬是要php做他所不能胜任的工作,只会是浪费时间.
如果楼主是致力于做工具,那么精神可嘉,帮你顶一下.Top
27 楼wfqn()回复于 2004-12-06 18:34:06 得分 0
关键是我们定位是跨平台应用,因为我们的开发人员对PHP熟悉,所以就选了它。说来当时没选JAVA而选了PHP确实是一大失误。现在要找到一种好方法解决也不容易。
如果这个threads库不行,也只好自己组织人写一个PHP的线程扩展了,除此之外,好像也没什么好办法。
或许可以完善一下这个threads库。Top



