php能不能像java一样的开线程,不要让用户等
发布网友
发布时间:2022-04-07 08:41
我来回答
共2个回答
热心网友
时间:2022-04-07 10:10
在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占用率非常低,感觉像是被控制了执行时间,被延迟执行了。
这是PHP走向大型应用非常重要的一个特性。比如在企业应用中,进行产品成本核算,要是上万种产成品和半成品(这在企业中已经算是很小的数量了)进行成本核算,用普通单线程方式可能需要几个小时才能完成计算。而且在单线程方式下用户希望通过购买有几十块CPU的高性能服务器来提高性能,都是没有任何作用的,因为单线程方式只能利用一块CPU的能力,单CPU与多CPU服务器的计算速度是一样的!!
而如果采用多线程编程,可以采用同时对几十种(或更高)产品并行计算的方法,各自的线程各自与数据库连接获取数据,并行处理,并在计算完成后自动发起下一个产品的计算。这样在多CPU情况下就可以用1/n(n为CPU数量)的时间完成计算。
热心网友
时间:2022-04-07 11:28
php单独做不了,你需要利用前端和后端做异步消息循环。
swoole 可以做, 但是相对而言建立swoole微服务比较麻烦
在现有项目已经完成的情况下, 可以考虑使用队列来异步处理