Php:何时使用pthread


Php: when to use pthread

我不太了解如何使用线程,但我研究了php的pthreads,它似乎非常有趣和容易,或者比我想象的更容易…

我搜索了示例并查看了文档,但我找不到任何真实世界的例子,当它实际上是有益的使用线程,它肯定是长任务,不依赖于对方,如做许多http请求或可能发送邮件。

但是写日志?插入数据库?(比如跟踪用户活动)从数据库中获取数据(我可以从线程返回数据吗?)

这会提高性能还是创建线程的开销太大?(虽然我可以使用工作池也得到更少的开销,我认为…)

任何建议或例子都非常感谢!

发行版中包含了许多示例,并且可以在github上获得:

https://github.com/krakjoe/pthreads/tree/master/examples

这些示例包括通用线程池、多线程套接字服务器和SQLWorker。

pthreads创建的线程和Zend自己通过多线程SAPI为服务请求设置的线程一样安全。它们兼容所有相同的功能,加上你所期望的高级线程API(几乎)。

在无共享架构的深处实现线程总是有限制的,但是从更好地使用物理资源的角度来看,以及PHP对任何给定任务的总体可用性方面的好处远远超过了围绕该环境工作的开销。

pthreads中包含的对象和其他PHP对象一样工作,你可以在任何引用该对象的上下文中读、写和执行它们的方法。

您的想法完全正确:衡量效率的标准不是应用程序执行的线程数量,而是如何利用这些线程来最好地服务于应用程序的主要目的。工人是一个好主意,只要你能使用他们,就这样做。

关于你问的具体事情,一个LoggingWorker是一个好主意,将工作,不要试图共享流,因为没有意义,它将是完全稳定的,如果工人打开日志文件,或数据库连接和堆栈执行它可以访问它们。示例中包含SQLWorker,这是API缺乏像样的异步API的另一个好主意,或者您只是更喜欢多线程编程的流程。

你不会得到一个更好或更正确的答案:我自己写了pthreads