有没有一种在PHP中实现多线程模型的现实方法,无论是真实的,还是仅仅模拟它.一段时间后,有人建议你可以强制操作系统加载另一个PHP可执行文件实例并处理其他同步进程.
这个问题是当PHP代码完成执行时,PHP实例仍然在内存中,因为没有办法从PHP中删除它.因此,如果您正在模拟几个线程,您可以想象会发生什么.所以我仍然在寻找一种可以在PHP中有效地完成或模拟多线程的方法.有任何想法吗?
我有一个需要调用shell脚本的PHP脚本,但根本不关心输出.shell脚本会进行大量的SOAP调用,并且完成起来很慢,因此我不想在等待回复时减慢PHP请求的速度.实际上,PHP请求应该能够在不终止shell进程的情况下退出.
我已经研究过的各种exec(),shell_exec(),pcntl_fork(),等功能,但他们都不似乎提供正是我想要的.(或者,如果他们这样做,我不清楚如何.)有什么建议吗?
我目前正在尝试在php中实现一个作业队列.然后,队列将作为批处理作业处理,并且应该能够并行处理某些作业.
我已经做了一些研究并找到了几种方法来实现它,但我并没有真正意识到它们的优点和缺点.
例如,通过多次调用脚本来执行并行处理,fsockopen如下所述:
PHP中的简单并行处理
我找到的另一种方法是使用这些curl_multi功能.
curl_multi_exec PHP文档
但我认为这两种方式会增加相当多的开销,在队列上创建批处理应该主要在后台运行吗?
我也读到了关于pcntl_fork这似乎也是一种处理问题的方法.但是如果你真的不知道自己在做什么(就像我现在这样;),那看起来就会变得非常混乱.)
我也看了一下Gearman,但在那里我还需要根据需要动态生成工作线程,而不是只运行一些,然后让gearman作业服务器将它发送给自由工作者.特别是因为线程应该在执行一个作业后干净利落地退出,不会遇到最终的内存泄漏(在该问题中代码可能不完美).
Gearman入门
所以我的问题是,你如何处理PHP中的并行处理?为什么选择你的方法,不同的方法有哪些优点/缺点?
感谢您的任何意见.
我正在使用zend创建一个Web应用程序,在这里我创建了一个接口,用户A可以从该接口向多个用户发送电子邮件并且它工作正常,但它会缩短执行时间,因为用户A等待太多"已确认的回复"(将在电子邮件发送后显示).
在Java中有"线程",通过它我们可以执行该任务(发送电子邮件)并且它不会减慢其余应用程序的速度.
在PHP/Zend中是否有任何技术就像在Java中一样,我们可以将我们的任务分开,这可能需要很长时间,例如:发送电子邮件.
我对使用线程知之甚少,但我查看了php的pthreads,它看起来非常有趣,容易,或者比我想象的更容易......
我搜索了一些示例并查看了文档,但是我找不到任何真实世界的例子,说明何时使用线程实际上是有益的,它确实适用于不依赖于彼此的长任务,例如执行许多http请求或也许发送邮件.
但是写日志条目怎么样?插入数据库?(比如跟踪用户活动)从数据库中获取(我可以从线程返回数据吗?)
这会增加性能还是过多地创建线程的开销?(虽然我可以使用工作池也可以减少开销,我认为...)
任何建议或例子都非常感谢!
我是PHP的新手,所以要开始我已经决定实现一个单例.
虽然我能够在php中重新创建单例模式,但我不确定如何实现双重检查锁定.
这在PHP中是否可行/需要.我在某处读过PHP不是多线程的?有人可以证实吗?
如果它是多线程的,有人可以向我解释一下lock()或synchronize()在PHP中是如何工作的吗?
谢谢,亨利
php singleton multithreading synchronize double-checked-locking
我正在尝试实现一个非常非常大的字典搜索来匹配PHP中句子中的单词.我最初的想法是使用Aho-corasick算法,因为Aho-corasick解决了我的确切问题.我首先用PHP实现了一个Trie.Trie在缓存时会生成一个足够快的字典; 但是,它占用大约3mb的内存.这在PHP中无法很好地扩展.
显然,无论我们使用何种数据结构,大型字典都会占用大量内存.我只需要单个字典实例,因为它是静态的,不需要重建.
如果这个对象可以在所有线程之间共享,那么3mb的内存可以忽略不计,但是,我不确定在PHP中的线程之间共享内存的正确方法.
如何在HTTP请求之间共享此对象?当每个线程需要由Trie创建的3mb开销时,我看不到项目缩放.
php ×10
asynchronous ×1
die ×1
mutex ×1
pthreads ×1
shell ×1
singleton ×1
synchronize ×1
task-queue ×1