SZ
флок — простой и часто достаточный способ коммуникации. вот когда недостаточный, тогда и можно о других вариантах думать. не всегда нужно именно чтобы быстро, а редис — отдельный сервис, про который ещё с админами надо договор заключить.
Size: a a a
SZ
AP
K
AP
sub flock_unlock {
flock($file, LOCK_EX) or die;
flock($file, LOCK_UN) or die;
}
cmpthese(
-2, {
flock_unlock => \&flock_unlock
}
);
SZ
AP
EV
AP
AP
open(my $file, ">", "/tmp/test-flock.lock") or die;
AP
AP
AP
K
AP
sem_lock_unlock 489359/s -- -73%
flock_unlock 1812055/s 270% --
AP
AP
my $sem = IPC::Semaphore->new(IPC_PRIVATE, 1, S_IRWXU | IPC_CREAT) or die "IPC::Semaphore->new: $!";
$sem->setval(0, 1) or die "sem setval: $!";
sub sem_lock_unlock {
$sem->op(0, -1, 0) or die "semop: $!";
$sem->op(0, 1, 0) or die "semop: $!";
}
SK
SZ
SZ
my $sem = IPC::Semaphore->new(IPC_PRIVATE, 1, S_IRWXU | IPC_CREAT) or die "IPC::Semaphore->new: $!";
$sem->setval(0, 1) or die "sem setval: $!";
sub sem_lock_unlock {
$sem->op(0, -1, 0) or die "semop: $!";
$sem->op(0, 1, 0) or die "semop: $!";
}
SK