Leser: 3
![]() |
![]() |
8 Einträge, 1 Seite |
1 2 3 4 5 6 7 8 9 10 11 12 13
use communication; use strict; my $communication = communication->new; my $input = "welcome"; while ($input ne "exit") { $communication->getNew(); $communication->message($input); print "->"; $input = <STDIN>; chomp($input); }
QuoteIch will als Einstieg einen kleinen Chat schreiben um mich mit der Abstraktion von Client und Server unter Perl vertraut zu machen.
Den Server habe ich bereits fertig und er gibt auch bereits Chat messages zurück und kann welche empfangen, aber wie bekomme ich Perl dazu das man gleichzeitig über <STDIN> etwas schreiben kann, und neue Nachrichten bekommt, also Perl zwei Aktionen gleichzeitig macht?
use communication;
sid burn+2008-03-23 02:21:08--Aber eins frage ich mich die ganze Zeit dann doch:
Wie kann dein Server schon fertig sein wenn du nicht weißt wie du zwei Aktionen gleichzeitig ausführen kannst, bzw du generell nichts von Multitasking weißt? So ein Chat Server basiert doch dadrauf das du mehrere Verbindungen mit Clients aufbauen musst und mehrere Dinge gleichzeitig machst. Gerade der Server müsste voll von einen der oben genannten Techniken sein.
QuoteBtw:
Code: (dl )use communication;
Du solltest dein modul in "Communication" abändern. (Großes C am anfang). Module in komplett kleinbuchstaben sind für Perl Reserviert.
sid burn+2008-03-23 02:21:08--In der Theorie sollte der Speicherverbrauch geringer sein. In der Praxis müssen bei Perl große Teile des Interpreters geclonet werden, so dasss ich den geringeren Speicherverbrauch nicht unterschreiben möchte.Threading:
Vorteile:
- Schneller und weniger Speicherverbrauch als Forking
QuoteLeider gibt es bei ernstzunehmenden Datenstrukturen (tiefe Datenstrukturen, Objekte) noch immer Probleme mit threads::shared.- Leichtere Kommunikation, und Datenaustausch da alle Threads auf die selben Daten zugreifen können.
QuoteMan muss auch beachten, dass nicht jedes vom Betriebssystem ausgelieferte perl Thread-Unterstützung haben muss.Nachteile:
- komplexer in der Programmierung da durch den gemeinsamen Datenaustausch schwer zu findende Fehler auftreten können. Sogenannte Race Condition die von der Reihenfolge der Ausführung abhängt. Um diese art von Fehler zu vermeiden musst du den Zugriff auf Variablen/Ressourcen locken. Dieses entfällt bei Forking.
- Durch den ersten nachteil ist somit nicht jede Bibliothek ist Threadsicher. Bibliotheken müssen extra Programmiert werden damit sie Threadsicher sind. Auch dies entfällt bei Forking.
- In Perl ist Threadsupport so lala eingebaut. Zwar ist der neue Moderne Threadsupport besser als der alte, allerdiengs ist dieser immer noch anders als man es eigentlich von Threading erwartet.
QuoteA task that calls sleep() or something else that doesn't return for a while will pause the entire program. This will change when Perl's threads become mainstream.
Calling die() or exit() in one task will stop every task, and indeed the entire program. This may not be the desired effect. It will change when POE gets exceptions.
1
2
Wenn ich jetzt eine Session erstelle die die ganze Zeit <STDIN> oder readline anfragen aufnimmt, ist es nicht fast das selbe wie sleep? Der Prozess gibt ja nichts zurück solange ich nicht Enter drücke.
Oder hab ich da jetzt was falsch verstanden
![]() |
![]() |
8 Einträge, 1 Seite |