RostD Asked:2020-01-20 02:36:22 +0000 UTC2020-01-20 02:36:22 +0000 UTC 2020-01-20 02:36:22 +0000 UTC 类的静态属性中的数据会混淆吗? 772 想象一下,同时向服务器发出几乎相同的请求。 服务器在形成响应时使用类的静态数组,以便从代码中的不同位置轻松访问它。 这个静态数组是否有可能包含发往不同客户端的数据? 附言 我确定不是,但我无法证明这一点。 php 1 个回答 Voted Best Answer Мелкий 2020-01-20T03:15:28Z2020-01-20T03:15:28Z 不,他们不能。 PHP 在架构上遵循这种方法,Shared nothing即 请求之间没有共享数据。PHP 保证,除非你自己为请求输入一个公共实体——例如,外部文件、会话机制、DBMS 等——并行请求根本不会相互影响,就好像它们不存在而你只有一个请求一样。 这是通过使用不同的地址空间(通常是不同的OS线程,常用的FPM的每个进程一次只执行一个请求)来处理每个用户请求来实现的。因此,需要为每一个新的请求从头开始应用,并在处理完请求后释放所有资源。这既是优点也是缺点。从好的方面来说,您不必考虑并发访问(直到您接触 PHP 外部的系统),这极大地简化了您的代码并消除了与并发相关的错误。请求后强制释放内存让您不必担心对于长时间运行的服务很重要的小内存泄漏——一个月内每分钟泄漏 1kb 已经是一件体面的事情了。此外,这种方法允许您通过添加新的 CPU 内核、新的处理器和全新的服务器轻松地线性扩展应用程序。缺点是为每个请求从头开始启动应用程序仍然不是免费的,这在本质上是一个相当无用的操作。
不,他们不能。
PHP 在架构上遵循这种方法,
Shared nothing即 请求之间没有共享数据。PHP 保证,除非你自己为请求输入一个公共实体——例如,外部文件、会话机制、DBMS 等——并行请求根本不会相互影响,就好像它们不存在而你只有一个请求一样。这是通过使用不同的地址空间(通常是不同的OS线程,常用的FPM的每个进程一次只执行一个请求)来处理每个用户请求来实现的。因此,需要为每一个新的请求从头开始应用,并在处理完请求后释放所有资源。这既是优点也是缺点。从好的方面来说,您不必考虑并发访问(直到您接触 PHP 外部的系统),这极大地简化了您的代码并消除了与并发相关的错误。请求后强制释放内存让您不必担心对于长时间运行的服务很重要的小内存泄漏——一个月内每分钟泄漏 1kb 已经是一件体面的事情了。此外,这种方法允许您通过添加新的 CPU 内核、新的处理器和全新的服务器轻松地线性扩展应用程序。缺点是为每个请求从头开始启动应用程序仍然不是免费的,这在本质上是一个相当无用的操作。