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