これは Web サーバーのシナリオです。Linux は OS です。異なる 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 が単一のプロセスで実行され、スレッド (インターリーブ) 自体がスクリプトである場合、上記のスクリプトは機能しません。このようなシナリオは、私が個別に口頭で得た回答とフィードバックに基づいて、そうではないように思われる、私が尋ねた 3 つのシナリオのうちの 1 つだけです。上記のスクリプトは、一意の値をpidではなく乱数に変更することで機能させることができますが、すぐに考えてみてください。