Php:何时使用 pthread

2022-08-30 14:41:52

我不太了解使用线程,但我研究了php的pthreads,它看起来非常有趣和容易,或者比我想象的要容易......

我搜索了示例并查看了文档,但我找不到任何实际示例,说明何时使用线程实际上是有益的,它肯定是用于不相互依赖的长任务,例如执行许多http请求或发送邮件。

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

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

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


答案 1

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

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

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

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

在共享的无结构架构的深处实现线程总是有局限性的,但是好处是更好地使用可供你支配的物理资源,以及PHP对任何给定任务的整体可用性远远超过围绕该环境工作的开销。

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

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

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

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


答案 2

推荐