flock
Jan Kasprzak
kas na informatics.muni.cz
Pátek Leden 15 21:16:28 MET 1999
Zdravim vsechny,
mel jsem takovy problem - potreboval bych vysvetlit, co se deje,
resp. proc se tak deje.
Mam neprilis silny stroj a perlovy skript, ktery na tom stroji
bezi. Skript filtruje prichozi postu. Kdyz se na tom stroji spusti vic nez
tak dve nebo tri instance toho skriptu, zacne swapovat a vsechno je
mnohonasobne pomalejsi. Predstavoval jsem si, ze ten skript nejak
serializuju. Pouzil jsem k tomu flock(FILE, FLOCK_EX) nebo tak nejak.
Serializace probiha v poradku, ale je to skoro stejne pomale. On totiz
ten perl zabere uz pri startu tolik pameti, ze pri nekolika instancich
(byt i nebezicich a cekajicich ve flock()) ten stroj zacne swapovat.
Otazka 1: Lze perlu nejak vysvetlit, aby neparsoval cely program, ale
nejak postupne?
Snazil jsem se to resit tak, ze vytvorim zamek v malinkem
Perlovem skriptu, ktery pak exec()ne ten hlavni. Problem je, ze Perl
tomu souboru nejak asi nastavi close-on-exec flag, takze po exec zustane
zamek odemceny. Nebo snad pred exec() sam ten soubor zavre. Proc to Perl
dela? Kdyz si napisu program v C, ktery zavola flock() na dany soubor
a pak exec()uje perlovy skript, funguje to spravne.
Vyresil jsem to tedy programem v C ke sve spokojenosti, ale chovani
Perlu je mi zahadou.
-Yenya
P.S.: Jeste by se to dalo zrychlit tim, ze bych misto
filtru v Perlu napsal server nad UNIXovymi sockety (usetril bych cas
straveny inicializaci perlu a kompilaci skriptu a vsech potrebnych modulu),
ale to opravdu az v nouzi nejvyssi.
--
\ Jan "Yenya" Kasprzak <kas at fi.muni.cz> http://www.fi.muni.cz/~kas/
\\ PGP: finger kas at aisa.fi.muni.cz 0D99A7FB206605D7 8B35FCDE05B18A5E //
\\\ Czech Linux Homepage: http://www.linux.cz/ ///
/// Can you say "ignored email" three times quickly while chewing \\\
// on an apple? --Linus Torvalds \\
Další informace o konferenci Perl