3 Stimmen

Ist es eine schlechte Idee, einen Multithreading-TCP-Server-Daemon in Perl zu schreiben?

Ist es eine schlechte Idee, Multithreading-Programme (insbesondere TCP-Server-Daemons) in Perl zu schreiben?

7voto

Jeff Ober Punkte 4827

Perl ist eine großartige Sprache für einen Server. Wenn Sie auf Bereiche stoßen, in denen interpretierter Code die Anwendung ausbremst, können Sie Erweiterungscode in C schreiben, um damit umzugehen.

Sie könnten auch nicht-blockierende E/A in Betracht ziehen, um den Overhead von Threads zu vermeiden. IO::Lambda ist ein nettes Modul dafür, das die ereignisbasierte Programmierung auf ein paar [anonyme] Unterprogramme vereinfacht.

6voto

Sinan Ünür Punkte 114993

Das hängt von der Perl-Version, die Sie verwenden, und dem Betriebssystem ab. Siehe Bugs und Beschränkungen en perldoc threads .

5voto

daotoad Punkte 26089

Ich würde so etwas mit POE und lassen Sie dann POE::Rad::Lauf separate Prozesse nach Bedarf abzweigen.

4voto

Ewan Todd Punkte 7269

Machen Sie weiter und schreiben Sie Ihren Server in Perl mit ithreads. Wenn es zu einer Belastung wird, den Interpreter zu duplizieren, dient Ihre anfängliche Implementierung als Prototyp, und Sie werden in der Lage sein, Ihre Anwendungslogik leicht zu übersetzen, zum Beispiel in C. Siehe perldoc perlthrtut .

2voto

Mathieu Longtin Punkte 14697

Obwohl es möglich ist, würde ich es nicht tun. Sie können nicht pre-spawning von Threads tun, da Sie nicht einen neuen Socket an bestehende Threads übergeben können.

Die Erstellung von Threads nach Bedarf kann sehr teuer sein, da alle Datenstrukturen für jeden neuen Thread kopiert werden. Bei einem einfachen Programm ist das in Ordnung, aber wenn man vorher eine Menge Daten in den Speicher geladen hat, ist es unerschwinglich.

Aus diesem Grund habe ich POE und AnyEvent in einem separaten Projekt verwendet, als ich einen Netzwerkserver benötigte. Sie sind nicht threaded, aber zumindest können Sie mehrere Verbindungen auf eine einigermaßen vernünftige Weise behandeln. Sie funktionieren gut unter Windows und Linux, und beide haben für meine Bedürfnisse sehr gut funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X