Hallo, Danke erstmal für deine lange Mail. Am Mo, den 29.12.2003 schrieb Gerald Goebel um 16:51:
_Multiprocessing:_ Das erstellen eines neuen Prozesses mit fork, der vollkommen unabhängig vom Parentprozess ist. Die einzige Kommunikation zum Parentprozess besteht über einen Returncode, der mit wait vom Parentprozess abgefragt werden kann/muß. Stirbt der Parentprozess, fängt init (Prozess# 1) den Childprozess auf, und der Childprozess wird damit zu einem Deamon. Alles an Variablen, Filedescriptoren etc. sind im Childprozess unabhängig und seperat vorhanden.
_Multithreading:_ Das erstellen eiens neuen Threads mit einem in der Prog.-sprache dafür vorgesehenen Befehls, er ist nicht unabhängig, und teilt sich alle "Variablen", Filedescriptoren etc. mit den anderen Threads.
Hier scheint sich genau der Nachteil vom Multithreding bemerkbar zu machen.
Meine Vermutung ist, der Befehl fork in Perl startet nicht einen eigenen Prozess, sondern macht nur einen eigenen Tread im Interpreter dafür auf. Neben dem Verhalten sprechen noch einige andere Aussagen dafür:
fork dupliziert den Thread und seinen Speicher. Damit teilen beide zwar die gleichen offenen Files, Variablen sind aber unabhängig voneinander. Der von mir gepostete Code ist "von sauberer Programmierung befreit" :-), prinzipiell sollte man aus obigem Grund z.B. STDOUT nach dem fork'en schliessen und neu öffnen, damit beide Prozesse schreiben können. Außerdem disoziiere ich den Child-Prozess. Damit sollte er eigentlich eigenständig werden und "dämonisieren". Was auch der Sinn der Sache ist. Gruß, Ratti -- -o) fontlinge | Font management for Linux | Schriftenverwaltung in Linux /\\ http://freshmeat.net/projects/fontlinge/ _\_V http://www.gesindel.de https://sourceforge.net/projects/fontlinge/