Php:何时使用pthread

Php:何时使用pthread,php,multithreading,pthreads,die,Php,Multithreading,Pthreads,Die,我对使用线程知之甚少,但我研究了php的pthreads,它看起来非常有趣和简单,或者比我想象的更简单 我搜索了一些示例并查看了文档,但我找不到任何实际的示例,说明什么时候使用线程才是真正有益的,它确实适用于互不依赖的长任务,例如执行许多http请求或发送邮件 但是呢 写日志条目? 插入到数据库?(如跟踪用户活动) 从数据库获取数据(我可以从线程返回数据吗?) 这会提高性能还是创建线程的开销太大?(虽然我也可以使用一个员工池来减少开销,但我认为…) 任何建议或例子都将不胜感激 发行版中包含了许多

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

我搜索了一些示例并查看了文档,但我找不到任何实际的示例,说明什么时候使用线程才是真正有益的,它确实适用于互不依赖的长任务,例如执行许多http请求或发送邮件

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

这会提高性能还是创建线程的开销太大?(虽然我也可以使用一个员工池来减少开销,但我认为…)


任何建议或例子都将不胜感激

发行版中包含了许多示例,github上提供了这些示例:

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

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

在无共享体系结构的内部深处实现线程总是有局限性的,但是从更好地使用您可以支配的物理资源的角度来看,PHP对于任何给定任务的总体可用性的好处远远超过了在该环境下工作的开销

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

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

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


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

php不是多线程的,很可能永远也不会。它的许多内部库和附加组件都不是线程安全的。您可以通过fork、exec、popen等生成php副本来“伪造”线程。。但它们不是真正的线程,开销远远超过了您可能希望获得的任何微观收益。Php不是多线程的,但看起来有一个pecl扩展,它提供了Php多线程功能,当您使用线程处理数据库内容时,似乎是非常谨慎的:因为每个线程都创建了自己的MySql资源,你会突然发现自己置身于事务之外。PHP的内部框架已经是线程安全的十多年了。扩展需要时间来适应,但所有最新的扩展都是线程安全的。重复旧评论和过时的fanboy flam没有任何好处。如果我没有弄错的话,扩展必须是线程安全的,才能得到PHP的正式支持。TSRM最终确定并完全集成到PHP中已经有很长一段时间了。具体来说,threadsafe windows发行版中包含的所有扩展在其核心都是线程安全的。是的,这些都是主要的扩展。谢谢:)我不是小丑,pthreads面对的是互联网上难以置信的内容量,坦白说,这是错误的。如果人们所说的关于PHP及其线程安全性或可靠性的任何事情都是真的,那么pthreads就根本无法工作。当面对我们不了解的事实时,我们要做的是研究,不要重复你曾经读到的关于某个主题的所有内容,并把它作为一个答案来总结。我很失望,有这么多分数的人认为没有必要比过去看得更远…@JoeWatkins我指的是那个否决你答案的人(到底是谁否决了你的答案?——查尔斯和我回答说……这个人一定是个小丑)。。。。干得好,Joe感谢
pthreads
和为
PHP
增加价值。。。。我期待着听到这将是核心PHP的一部分。。很好的一个哦,我觉得很冷,因为我否决了一个在帮助别人方面付出了很多努力的人,我确实觉得有点滑稽,但希望这是可以理解的。。。我在下面的回答中非常详细地解释了过去、设计、实现和影响:事实是,它可能永远不会包含在核心中(apc也不会,让我们不要忘记积分不需要包含在核心中),其基本原理请参见我链接的帖子。谢谢你的好话。我真的认为你应该用一些真实的实例和用例来更新PHP文档。。这样,更多的人可以使用,从反馈中,lib变得更好。。。别担心,我会让大家知道的…@joe谢谢你的精彩扩展。也许这些示例可以进入正式的php.net文档?