[Vienna-pm] anmerkungen ..
gooly at gmx.at
gooly at gmx.at
Mon May 28 10:56:01 PDT 2007
Am Montag, 28. Mai 2007 schrieb Peter J. Holzer:
> On 2007-05-28 09:29:52 +0200, gooly at gmx.at wrote:
> > Am Sonntag, 27. Mai 2007 schrieb Peter J. Holzer:
> > > On 2007-05-26 12:09:00 +0200, gooly at gmx.at wrote:
> > > > Am Freitag, 25. Mai 2007 schrieb Peter J. Holzer:
> > > > > Eine Methode, Memory-Leaks zu vermeiden, ist es zu forken und
> > > > > die eigentliche Arbeit im Kind-Prozess zu machen.
> > > >
> > > > Ja, aber dann hätt ich lauter forks in in forks in forks..
> > >
> > > Warum das?
> >
> > Nun, ein Server wartet auf clients und 'forket' dann, wenn in
> > dieser Anwendung nun weitere Prozesse starten müssen, die
> > ihrerseits dann...
>
> Ah, mir war nicht klar, dass Du ohnehin schon einen forking server
> hast. Da ist existiert das Problem, dass der Server nie mehr
> schrumpft ja meistens nicht: Der Parent-Prozess macht nichts außer
> accept und fork, und bleibt damit schön klein, die Kindprozesse
> sterben sobald der Client disconnected und geben damit jeden
> Speicher, den sie hatten, wieder frei.
>
> Damit musst Du natürlich nicht innerhalb eines Kindprozesses nochmal
> forken, es sei denn, die Clientsessions können lange dauern und viel
> Speicher fressen. Mit der "externe-Programme mittels system starten,
> um die Arbeit zu machen"-Methode hast Du aber genau die
> verschachtelten forks: Zuerst forkt der Server, wenn er eine neue
> Connection erhält, dann forkt das Kind für jeden File-Request, und
> das Enkelkind exect dann cat bzw. zip (und wenn Du nicht aufpasst,
> hast Du eine Shell auch noch dazwischen).
Naja, forken wollte ich ja schon und damit spezielle Dinge aus dem
Programm raushalten, aber mit dem dubbing von STDOUT auf den socket
brauche ich dazu nur 4 zeilen statt einem fork oder open und die
if-struktur..
> > Wenn Perl (so wie 'andere' auch) forket, wird das Programm ja
> > geklont. Da habe ich dann die Situation, dass der Server für jede
> > Client dessen eigenes Datenquellprogramm startet. Wenn das aber
> > nicht so ideal ist, bei einer zeitkritischen Anwendungen zB, die
> > bestimmten Dingen einen Zeitstempel verpassen und die von
> > unterschiedlichen Dingen abhängen: der steht, bis er Daten kriegt,
> > der zweite soll aber genau zur vollen Minute 'was machen', dann ist
> > es dies Konzept nicht mehr so gut.
>
> Wenn Du ein hartes Echtzeitsystem brauchst, solltest Du
> wahrscheinlich sowohl um General-Purpose-Betriebssysteme (Linux,
> Windows, ...) als auch um Perl einen großen Bogen machen.
Warum Linux nicht, warum Perl nicht? Laut einer Untersuchung (aus dem
Netz) aus Deutschland ist Perl (auch Python und so) viel schneller
programierbar als zB C oder C++ ist aber parktisch genauso schnell in
der Ausführung wie C (später kann man ja dann noch C erzeugen, wenn man
möchte). In C muss man aber jeden Kleinkram selber machen und C++ und
Java sind etwas für Romaschreiber - nix für Faule ;)
> Wenn es
> weniger hart ist, verstehe ich nicht, welches Szenario du da jetzt
> meinst, und welches Konzept jetzt besser oder schlechter sein soll
> als welches andere Konzept. Kannst Du da konkreter werden?
Nun es geht um Kursdaten, Aktien, Währungen, Futures. Da hast Du nur
eine Quelle, oder Du hast mehrere Quellen, die Du dann untereinander
vergleichen musst wegen der badTicks. Aus denen mach ich dann erstmal
1-Minuten-Bars. Und die möchte ich dann nach versch Ansätzen weiter
bearbeiten und jeder Ansatz sollte selbständig sein. Mir ist lieber
mehrere kleine Programme die definierte kleine Aufgaben erledigen, als
ein Riesending für alles.
> > Und das Prinzip Radio mit ein und derselben 'live'-Datenquelle für
> > alle Clienten habe ich in der umfangreichen 'Literatur' nicht
> > gefunden..
>
> Multicast.
Hmmm.
Ich hab mir deshalb
threads::shared;
mit IO::Socket::INET;
genommen: 1. thread für die Kursallokation und dem Timestamp
per shared vars diese 1) an den 2. thread und 2) an den die Clienten
schickt. Der 2. thread macht daraus 1 Minuten-Bars zum sichern und für
die Clients, die sind das jew. die nächsten therads, mein radio.pl
Aber jetzt noch eine andere Frage.
Ich will mir
http://search.cpan.org/~kwilliams/Algorithm-SVMLight/lib/Algorithm/SVMLight.pm
installieren.
Da cpan -i Algorithm::SVMLight.pm
nicht klappt, muss ich es 'zu Fuß' machen, aber auch hier gibt es
Probleme:
Es braucht dazu ein lib von hier, die zu patche ist (gemacht)
Jetzt findet aber die Perl-Installations-Kaskade
perl Build.PL
perl Build
(bis hier klappts)
perl Build test
(da ist's dann aus)
perl Build install (may need to be done as root)
Das ist der Grund:
/usr/bin/perl lib/Algorithm/Makefile.PL lib/Algorithm/Makefile
Malformed argument 'lib/Algorithm/Makefile'
at /usr/lib/perl5/site_perl/5.8.6/Module/Build/Compat.pm line 163,
<DATA> line 547.
/usr/bin/perl lib/Algorithm/Build.PL lib/Algorithm/Build
Checking whether your kit is complete...
WARNING: the following files are missing in your kit:
lib/Algorithm/param_set.c.PL
lib/Algorithm/SVMLight.xs
Please inform the author. ....
Diese Dateien sind eh da, aber ich muss sie jetzt dorthinschieben, dass
perl auch weiss, sie sind da.
Da ich alles händisch machen musste, habe ich mal einen Folder erzeugt:
/usr/lib/perl5/5.8.6/Algorithm
(wo die anderen sind) und alles hineingestopft, auch die 'externen'
svm-Programme inkl der libsvmlight.a. Aber obige Fehlermeldung deutet
darauf hin, dass ich in Algorithm/ noch einmal lib/Algorithm/ habe -
wär das so? Ich denke es gäbe eine elegantere Lösung?
Peter, wie soll denn so eine Modul-Folder in Perl aussehen und wo tue
ich am besten die 'andere' lib hin? Gibt es da - hhm - Standards?
Danke und noch einen schönen Abend,
Calli
More information about the Vienna-pm
mailing list