如果我有一个database.php类(singleton),它为我的Web应用程序的用户读取和写入信息,当调用同一个数据库函数的同时请求时会发生什么?
数据库类是否可能会将错误信息返回给同时访问同一函数的其他用户?
还可能出现其他类似问题?
答案 0 :(得分:4)
调用同一数据库函数的同时请求时会发生什么?是否有可能数据库类将错误的信息返回给同时访问同一函数的其他用户?
绝对不是。
每个PHP请求都完全在它自己的进程空间中处理。没有线程,没有应用程序服务器连接池,没有共享内存,没有像这样的时髦。没有任何东西是共享的,除非你已经不再这样做了(比如在APC / memcached中缓存东西)。
每次应用程序启动时,都会创建Singleton。请求结束时,脚本也是如此。当脚本退出时,所有变量(包括您的Singleton)都会随之消失。
还可能出现其他类似问题?
除非您正在使用事务(如果您使用的是MySQL,使用像InnoDB这样的事务安全表类型),用户可能会看到部分更新。例如,假设您需要对三个表执行更新以正确更新一组数据。在第一次更新完成之后但在其他两个更新完成之前,可能会出现另一个进程并从三个表中请求数据并获取现在不一致的数据。这是race condition的一种形式。