这是一个 Web 服务器场景。Linux 是操作系统。不同的 IP 地址调用相同的脚本。
Linux 是否为每个脚本调用启动一个新的 Perl 进程,或者 Perl 是否交错运行多个调用,或者脚本是否连续运行(一个接一个)?
抱歉,我在 Google 的前几个结果中没有找到答案。
我需要知道才能知道我有多担心并发数据库访问。
脚本本身不使用多线程,它是一个简单的 Perl 脚本。
更新:更复杂的调度程序或评论序列化程序在下面回答,仍然未经测试:
#! usr/bin/perl
use Fcntl;
use Time::HiRes;
sysopen(INDICATOR, "indicator", O_RDWR | O_APPEND); # filename hardcoded, must exist
flock(INDICATOR, LOCK_EX);
print INDICATOR $$."\n"; # print a value unique to this script
# in single-process context it's serial anyway
# in multi-process context the pid is unique
seek(INDICATOR,0,0);
my $firstline = <INDICATOR>;
close(INDICATOR);
while("$firstline" ne $$."\n")
{
nanosleep(1000000); # time your script to find a better value
open(INDICATOR, "<", "indicator");
$firstline = <INDICATOR>;
close(INDICATOR);
}
do "transferHandler.pl"; # name of your script to run
sysopen(INDICATOR, "indicator", O_RDWR);
flock(INDICATOR, LOCK_EX);
my @content = <INDICATOR>;
shift @content;
truncate(INDICATOR,0);
seek(INDICATOR,0,0);
foreach $line(@content)
{
print INDICATOR $line;
}
close(INDICATOR);
再次编辑:如果 perl 在单个进程中运行并且线程(交错)脚本本身,上述脚本将不起作用。这种情况是我提出的三个问题中唯一的一个,根据我分别口头得到的答案和反馈,情况似乎并非如此。上面的脚本可以通过将唯一值更改为随机数而不是快速思考的 pid 来工作。