Php:何时使用pthread

时间:2013-01-02 17:49:19

标签: php multithreading pthreads die

我对使用线程知之甚少,但我查看了php的pthreads,它看起来非常有趣,简单,或者比我想象的更容易......

我搜索了一些示例并查看了文档,但是我找不到任何真实世界的示例,说明何时使用线程实际上是有益的,它肯定适用于不依赖于彼此的长任务。 http请求或可能发送邮件。

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

这会提高性能还是过多地创建线程的开销? (虽然我可以使用工作池来减少开销,但我认为......)

非常感谢任何建议或示例!

1 个答案:

答案 0 :(得分:93)

分发中包含许多示例,可在github上找到:

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

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

线程pthreads创建与Zend本身通过多线程SAPI为服务请求设置的线程一样理智且安全。它们兼容所有相同的功能,以及您对高级线程API(几乎)所期望的所有功能。

在无共享体系结构的深层实现线程总是存在局限性,但是在使用更好的物理资源方面的好处,以及PHP对于任何给定任务的总体可用性远远超过解决这个环境的开销。

pthreads中包含的对象可以像任何其他PHP对象一样工作,您可以从任何带有对象引用的上下文中读取,编写和执行它们的方法。

您正在考虑正确的方向:效率的衡量标准不在于您的应用程序执行的线程数,而是如何利用这些线程来最好地服务于应用程序的主要目的。工人是个好主意,无论你在哪里使用它们,都可以这样做。

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

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