FastCgi是线程安全的吗?

Joe*_*Fan 6 fastcgi

我对FastCGI的工作原理有点困惑.我的程序真的只有一个实例正在运行,还是有一些神奇的线程正在进行?这很重要,因为如果我的数据结构具有主循环之外的范围,我需要知道这些数据结构是否需要是线程安全的.

编辑:我的应用程序是在Perl中,这是我的apache2配置:

<IfModule mod_fastcgi.c>
   AddHandler fastcgi-script .fcgi .fcg
   FastCgiServer /usr/lib/app/process.fcg -idle-timeout 60 -processes 1
 </IfModule>
Run Code Online (Sandbox Code Playgroud)

为了清楚我要问的是什么......对于这段代码:

use CGI::Fast qw/:standard/;

my %sharedHash;

while (new CGI::Fast) {
     # do stuff with %sharedHash
}
Run Code Online (Sandbox Code Playgroud)

"do stuff"部分是安全的还是一些"多线程魔法"正在进行,这可能意味着多个线程同时执行"do stuff",从而破坏%sharedHash

Rap*_*ien 1

FastCGI 本身只是 Web 服务器和应用程序之间的接口。您的应用程序可以是多线程的(Java 几乎都是这种情况,通常是 Python),或者以异步、事件驱动的风格编写(Python、Node.js 等中的 Twisted)。如果是前者,那么您需要确保对全局状态结构的访问正确地线程同步。

来自FastCGI 白皮书架构独立性。CGI 不依赖于任何特定的服务器体系结构(单线程、多线程等)。