PHP可以同时或逐个处理多个请求吗?

PHP可以同时或逐个处理多个请求吗?,php,mysql,Php,Mysql,我想运行一个每秒运行一次的PHP脚本来更新MySQL表 假设此脚本需要0.99秒,执行脚本时是否会阻止网站访问者访问网站?他们是否会收到超时/内部服务器错误? 如果是这样的话,有没有办法使用某种多线程选项来解决这个问题 为了提供更多细节,我正在尝试创建一个角色扮演游戏,里面有怪物。 这些怪物存储在一个名为rpg_怪物的表格中。怪物表有一个ID、目标、x和y区域,需要查看它们是否在彼此的射程内,以攻击可能的敌人。 如果他们在彼此的射程内,他们需要将他们的目标更新为怪物ID。今天我仍然有一些怪物,但

我想运行一个每秒运行一次的PHP脚本来更新MySQL表

假设此脚本需要0.99秒,执行脚本时是否会阻止网站访问者访问网站?他们是否会收到超时/内部服务器错误? 如果是这样的话,有没有办法使用某种多线程选项来解决这个问题

为了提供更多细节,我正在尝试创建一个角色扮演游戏,里面有怪物。 这些怪物存储在一个名为rpg_怪物的表格中。怪物表有一个ID、目标、x和y区域,需要查看它们是否在彼此的射程内,以攻击可能的敌人。 如果他们在彼此的射程内,他们需要将他们的目标更新为怪物ID。今天我仍然有一些怪物,但是这个数字在将来会增加,从而增加脚本的执行时间

我知道在正常情况下,您需要一台专用服务器来完成这类紧张的工作。然而,我想看看在过载之前我能把PHP/MySQL推到什么程度


提前谢谢你

人们仍然可以访问您的站点。您通常会使用php脚本在crontab中更新数据库,然后让apache为web请求提供服务。Apache通常会限制它可以拥有的并发连接的数量,因此这将是您对可以同时访问站点的人数的限制

您可能遇到的唯一问题是sql查询锁定了表,因此脚本对同一个表运行查询,并且必须等待第一个查询完成。正确构造更新查询应该可以避免这种情况。

简短回答:否

每次对PHP脚本的新调用都会创建一个新的PHP实例(通常是一个新的进程,在某些情况下它只是在一个新线程下运行,但这并不影响您的问题),并且多个实例彼此独立地运行

作为套管点,请尝试运行以下脚本:

<?php

  sleep(20);

?>

…并在运行时发送新请求/启动另一个实例。你会发现一个对另一个没有任何影响


再补充一点关于问题的线程元素的信息:PHP本身不能是多线程的。如果您在最近的IIS中以IIS模块的形式运行它(我记不清这是什么时候启动的),PHP实例将在IIS进程的新线程下运行,但您不能从PHP中启动新线程。在每个其他设置(AFAIK)中,每个新的PHP实例都会创建一个新的进程。

简短回答;不可以。一次可以有多个用户访问脚本/页面。想象一下,有多少人一直在Facebook上加载相同的文件。千万不要做出这样的假设:D(0,99秒的运行时间)我建议你使用AJAX来实现这个目的。例如,您可以让AJAX每秒调用一个PHP文件来更新MySQL表,然后让它对照上次更新的字段进行检查,这样,如果多个用户发送AJAX请求,则每1秒只允许一次更新。或者您可以使用Cron选项卡或计划任务,在这些任务中,它们独立于客户端请求执行这些操作。漫无边际…当php脚本完成执行时,该过程会发生什么?那么一次有多少人可以访问这个网站?@D_Vaibhav这个答案有点糟糕,但我没有时间重写它。它完全依赖于所谓的SAPI——一些SAPI(我认为mod_php?)为每个请求派生一个新的进程,并在请求结束时终止。FPM有一个一次处理一个请求的进程池,但进程是循环的。一些SAPI使用线程模型,其中创建一个新线程来处理请求,然后终止。我不确定是否有任何现有的SAPI可以做到这一点,但您也可以维护一个线程池并回收它们。适用于您的内容取决于您使用的SAPI。