1
34
PHP并不是面向多线程的:正如您已经注意到的,每个页面都由一个PHP进程提供服务——一次只做一件事,包括在数据库服务器上执行SQL查询时“等待”。 不幸的是,你对此无能为力:这是PHP的工作方式。
因此,实际上,服务器的8核最终将被使用;-)
对于我第二点中的情况,因为你不需要立即完成那些事情…好吧,只是不要马上做;-)
对于其他一些操作,您只希望它们每隔X分钟运行一次——在这里,cronjob也是完美的工具。 |
2
56
介绍PHP已满 Multi-Threading 你可以在很多方面充分利用的支持。已经能够在不同的示例中演示这种多线程能力:
A quick Search 会提供额外的资源。 类别1:MySQL查询MySQL is fully multi-threaded 并且将利用多个CPU,前提是操作系统支持它们,如果正确配置性能,它还将最大化系统资源。
中的典型设置
thread_cache_size 如果有很多新的连接,可以提高性能。通常,如果您有一个好的线程实现,那么这不会提供显著的性能改进。但是,如果您的服务器每秒看到数百个连接,您通常应该将线程缓存大小设置得足够高,以便大多数新连接使用缓存线程。 如果您正在使用 Solaris 然后你可以用
thread_concurrency 使应用程序能够向线程系统提供有关应同时运行的所需线程数的提示。 该变量自mysql 5.6.1起已被弃用,并在mysql 5.7中被删除。您应该在任何时候从MySQL配置文件中删除它,除非它们是针对Solaris 8或更早版本。 InnoDB: : 如果你在使用 Innodb 具有存储引擎,因为它完全支持线程并发性
你也可以看看
其他:
其他配置也要查看包括
PHP:
在
Here is a Full Working Example of SQLWorker 2:HTML内容解析
如果您已经知道这个问题,那么通过事件循环、作业队列或使用线程可以更容易地解决。
一次处理一个文档可以是
用
HTML扫描
产量
使用的类
实验
尝试句法分析
更好的体系结构
生成太多线程,这在生产中不是一件聪明的事情。更好的方法是使用
Pooling
. 有一个定义池
Workers
然后
stack
用一个
绩效改进
很好,上面的例子仍然是
3:搜索索引更新第一个答案几乎可以回答这个问题,但是有很多方法可以改进性能。你有没有考虑过基于事件的方法? 介绍活动@rdlowrey 报价1:
@罗瑞 报价2:
你为什么不试试
我知道这个问题就是
终于考虑
我想你应该用冷凝器
然后在后台完成所有浪费时间的任务。请看 Making a large processing job smaller 用于类似的案例研究。 分装机分析工具??没有用于Web应用程序的单一配置文件工具 Xdebug 到 Yslow 都很有用。xdebug在线程方面没有用处,因为它不受支持 我没有最喜欢的 |
3
4
扩展Web服务器并不会使MySQL在访问多核CPU时让步一英寸。为什么?首先考虑MySQL的两个主要存储引擎 MyISAM此存储引擎无法访问多个核心。它从来没有也永远不会。它为每个插入、更新和删除操作执行完全表锁定。从多个Web服务器发送查询以使用myisam做任何事情都会遇到瓶颈。 InnoDB在MySQL5.1.38之前,这个存储引擎只访问了一个CPU。你必须做一些奇怪的事情,比如 run MySQL multiple times on one machine to coerce the cores to handle different instances of MySQL . 然后,在多个实例之间平衡Web服务器的DB连接负载。这是老一套(尤其是如果您使用的是MySQL5.1.38之前的版本)。 从mysql 5.1.38开始,安装新的innodb插件。它有一些特性,您必须对这些特性进行调优,才能让InnoDB访问多个CPU。我在DBA StackExchange中写过这个
这些新功能在MySQL5.5/5.6和Percona服务器中也完全可用。 告诫如果自定义CMS使用全文索引/搜索,则应升级到MySQL5.6,因为InnoDB现在支持全文索引/搜索。 安装到MySQL5.6不会自动使CPU运行。您必须对其进行调优,因为在未配置的情况下,旧版本的MySQL可能会超过并超过新版本:
|
4
2
这可能不是您正在寻找的问题的答案,但您寻求的解决方案涉及线程。多核编程需要线程,线程是 不 在PHP中实现。 但是,在某种意义上,您可以通过依赖操作系统的多任务能力来在PHP中伪造线程。我建议快速概述一下 Multi-threading strategies in PHP 制定一个策略来实现你所需要的。 |
5
1
让你们知道,当你们想: “较差的PHP没有多线程” 好。。。 Python doesn't have real multithreading either . Nor does NodeJS have multi-threading support .Java有某种类型的多线程,但即使在那里, some code halts the whole machine afaik . 但是:除非你对一件事进行大量的编程,否则这是无关紧要的。许多请求击中了您的页面,所有核心都将被使用,因为每个请求都用它自己的单个线程产生自己的进程。 |
Jacco · 未能格式化我的日期以在php中正确工作 1 年前 |
jay ram · 如何在URL核心php中从API获取JSON? 1 年前 |
Ishwarya A · php电子表格在浏览器中显示多张excel 1 年前 |