我维护一个定制的类似CMS的应用程序。
每当提交文档时,都会执行一些任务,这些任务可以大致分为以下几类:
类别1包括对与文档内容有关的各种MySQL表的更新。
类别2包括对存储在MySQL LONGTEXT字段中的HTML内容的解析,以执行一些自动锚标记转换。我怀疑此任务花费了大量计算时间。
类别3仅使用与文档相对应的几个字段就对基于MySQL的简单搜索索引进行了更新。
所有这些任务都需要完成,才能将文档提交视为已完成。
承载此应用程序的计算机具有双四核Xeon处理器(总共8个内核)。但是,无论何时提交文档,所有执行的PHP代码都被限制为在一个内核上运行的单个进程。
我的问题:
您使用什么方案(如果有)在多个CPU内核之间分配PHP / MySQL
Web应用程序处理负载?我理想的解决方案基本上是产生几个进程,让它们在多个内核上并行执行,然后阻塞直到所有进程完成。
相关问题:
您最喜欢的PHP性能分析工具是什么?
PHP并非完全面向多线程:正如您已经注意到的,每个页面都由一个PHP进程提供服务-一次只做一件事,包括在数据库服务器上执行SQL查询时仅“等待”。
不幸的是,您无能为力:这就是PHP的工作方式。
不过,这里有一些想法:
因此,实际上,您服务器的8个核心将最终被使用;-)
而且,如果您认为自己的页面生成时间过长,则可能的解决方案是将计算结果分成两组:
对于第二点中的那种情况,因为您不需要立即完成这些事情……那么,就不要立即执行它们;-)
我经常使用的一种解决方案是某种排队机制:
对于其他一些操作,您只希望它们每隔X分钟运行一次-而且在这里cronjob也是理想的工具。
问题内容: 是否有一种实际的方法可以在PHP中实现多线程模型,无论是真正的还是仅对其进行仿真。一段时间以前,建议您可以强制操作系统加载PHP可执行文件的另一个实例并处理其他同时进行的进程。 这样做的问题是,当PHP代码完成执行PHP实例后,它仍保留在内存中,因为无法从PHP中杀死它。因此,如果您正在模拟多个线程,则可以想象会发生什么。因此,我仍在寻找一种可以在PHP中有效完成或模拟多线程的方法。有
我正在运行大型模型(774M)的GPT-2代码。它用于通过交互式_条件_样本生成文本样本。林克:这里 因此,我给出了一个输入文件,其中包含自动选择生成输出的提示。此输出也会自动复制到文件中。简而言之,我不是在训练它,而是在使用模型生成文本。而且,我使用的是一个GPU。 我在这方面面临的问题是,代码没有充分利用GPU。 通过使用NVIDIASMI命令,我可以看到下图 https://imgur.co
在北网的优化指南中,针对英特尔GPU的OpenCL开源实现 工作组大小应大于16,并且是16的倍数。 Gen上有两个可能的SIMD车道是8或16。为了不浪费SIMD车道,我们需要遵循这个规则。 英特尔处理器图形Gen7.5的计算架构中也提到: 对于Gen7。基于5个产品,每个EU有7个线程,总计28 KB的通用寄存器文件(GRF)。 。。。 在Gen7上。5计算架构,大多数SPMD编程模型都采用这
问题内容: 我一直在看Redis。看起来很有趣。但是从实际的角度来看,在哪种情况下最好使用Redis而不是MySQL? 问题答案: 忽略整个NoSQL与SQL的争论,我认为最好的方法是将它们结合起来。换句话说,对于系统的某些部分(复杂的查询,事务)使用MySQL,而对于其他部分(性能,计数器等)则使用Redis。 以我的经验,与可伸缩性(很多用户…)相关的性能问题最终迫使您添加某种缓存来减轻MyS
问题内容: 我正在尝试将Hibernate用于多线程应用程序,其中每个线程都检索一个对象并将其插入表中。我的代码如下所示。我每个线程都有本地hibernate会话对象,在每个InsertData中,我都执行beginTransaction和commit。 我面临的问题是很多次我收到“ org.hibernate.TransactionException:不支持嵌套事务” 由于我是hibernate
问题内容: 如何检测expressJS应用程序在什么环境中运行?(开发,测试,生产?)。没有任何迹象表明环境… 我知道您可以在每种环境下的配置文件中声明变量,但这对动态加载模块没有帮助… 问题答案: 您可以通过选中(可以在Express中使用)检查环境,也可以通过直接检查(在该变量中找到的环境或默认为“开发”中的环境)来更直接地进行操作。其他库,例如Socket.IO等)。