【发布时间】:2012-12-17 02:15:57
【问题描述】:
我对使用线程了解不多,但我研究了 php 的 pthreads,它看起来非常有趣和简单,或者比我想象的更容易......
我搜索了示例并查看了文档,但我找不到任何实际示例说明何时使用线程实际上是有益的,这肯定是用于不依赖于彼此的长任务,例如执行许多任务http 请求或发送邮件。
但是呢? 写日志条目? 插入数据库? (比如跟踪用户活动) 从数据库中获取(我可以从线程中返回数据吗?)
这会提高性能还是创建线程的开销太大? (虽然我也可以使用工作池来减少开销,但我认为......)
非常感谢任何建议或示例!
【问题讨论】:
-
php 不是多线程的,而且很可能永远不会。它的许多内部库和附加组件都不是线程安全的。您可以通过 fork、exec、popen 等生成 php 副本来“伪造”线程。但它们不是真正的线程,并且开销大大超过了您可能希望获得的任何微观收益。
-
php 不是多线程的,但看起来有一个 pecl 扩展可以提供 php 多线程功能,github.com/krakjoe/pthreads 似乎是合法的
-
将线程用于数据库时要小心:由于每个线程都创建自己的 MySql 资源,您会突然发现自己处于事务之外。
-
PHP 的内部框架十多年来一直是线程安全的。扩展需要时间来适应,但所有最新的扩展也是线程安全的。照搬旧评论和过时的狂热粉丝没有任何好处。
-
如果我没记错的话,扩展必须是线程安全的才能被 PHP 正式支持。 TSRM 最终确定并完全集成到 PHP 中已经有很长时间了。具体来说,线程安全 Windows 发行版中包含的所有扩展在其核心上都是线程安全的。是的,这是所有主要扩展。
标签: php multithreading pthreads die