Ist es eine schlechte Idee, Multithreading-Programme (insbesondere TCP-Server-Daemons) in Perl zu schreiben?
Antworten
Zu viele Anzeigen?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.
Das hängt von der Perl-Version, die Sie verwenden, und dem Betriebssystem ab. Siehe Bugs und Beschränkungen en perldoc threads
.
Ich würde so etwas mit POE und lassen Sie dann POE::Rad::Lauf separate Prozesse nach Bedarf abzweigen.
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
.
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.
- See previous answers
- Weitere Antworten anzeigen