Machbarkeitsanfrage Python oder andere Sprache

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Yogi
User
Beiträge: 80
Registriert: Montag 21. Januar 2008, 16:35
Wohnort: Bonner

Machbarkeitsanfrage Python oder andere Sprache

Beitragvon Yogi » Samstag 26. Januar 2008, 21:17

Hi, dies ist mein erstes Posting hier. Ich habe zwar seit einigen Wochen vieles gelesen und ausprobiert und ich fühle mich (wieder) recht wohl mit Python. Ich habe vor einigen Jahren ein kleines Tool für Softimage XSI in Python erstellt und das klappte ganz gut, habe es aber dann wegen mangelnder API Unterstützung seitens XSI wieder sein lassen. Auch hatten viele Leute damals Probleme damit, die richtige Version von Python zu installieren. Momentan arbeite ich mich in Java ein, und erstelle gerade eine Proxy- Version eines Projektes in BlitzMax. Diese ist so gut wie beendet und läuft unoptimiert recht zügig.

Aber das nur als Vor-Info.

Was ich hier fragen möchte ist, wie eure Meinung ist, bezüglich der serverseitigen Umsetzung meines Projektes in Python. Leider kann BlitzMax kein Threading und fällt dadurch weg. Eigentlich hatte ich vor, mein Projekt in Java um zu setzen, aber durch einen bekannten und eigenen Nachforschungen kam ich wieder zu Python. Und wenn ich Wahl habe ob Java oder Python dann würde ich Python doch vorziehen ;)

Also, jetzt mal was genauer um was es geht:

Stellt euch einen Planeten-Simulation vor, also viele Planeten, die miteinander alle in Abhängigkeit stehen (Umlaufbahn etc)

Ich möchte nun serverseitig die Simulation ständig am laufen haben. Die Koordinaten der einzelnen Planeten (so ca. 1000) sollen möglichst realtime mäßig an eben so viele Clients übertragen werden, die durch den Raum navigieren können. Die eigentlich Darstellung ist dann Clientsache und kann in sonst einer Sprache bewerkstelligt werden.

Klar ist, dass ich nicht alle Positionen an alle Clients übertragen kann, deswegen sollen erst einmal nur die Positionen übertragen werden, die in nächster Nähe des Clients sind. Der Rest folgt später, wenn ich eine effektive Optimierungstechnik ausgetüftelt habe.

Meine Fragen nun:

1) Kann ich mein Python-Programm als Applikation auf einem (Apache?)-Server non-stop laufen lassen?

2) Kann ich die Berechnungen so optimieren, dass sie von der Geschwindigkeit her in Richtung C, C++ C#, Java ... gehen?
Folgenden Link habe ich da als Info-Quelle zu gezogen http://www.scipy.org/PerformancePython

3) Wenn ich alles OO mässig machen möchte, wie kann ich die Daten aus den Objekten (Planeten) an C-Routinen übergeben. Da die Berechnung nach dem Motto ' jeder mit jedem ', also nach der Formel
( Anzahl Berechnungen = n * ( n + 1 ) / 2 ) geht, sind einige Berechnungen pro Tick durch zu führen.

Ich habe dazu noch nichts gefunden. Würdet ihr nur die eigentlichen Berechnungen innerhalb der Methode konvertieren oder die ganze Methode an sich auslagern?

4) Ich dachte an die Kombination lighttpd - twinsted - sqlalchemy
Ist das erprobt und bewährt? Spricht was dagegen. Statt lighttpd lieber Apache?

5) Ich schätze sowas wird nur über einen dedicated Server gehen. Was für ein BS würdet ihr empfehlen? Linux oder Win2003? Wenn Linux, welches genau? Ich möchte nämlich gerne erst einmal alles auf meinem Rechner testen und dann wenn mehr Leute sich anschliessen auf einen echten Server umsteigen.

Ich glaube, das wäre es erst einmal.

Ich wäre euch für alle Informationen sehr dankbar. Wenn es irgendwie geht würde ich nämlich lieber die Komplexität von Java mit Projekt-Darkstar umgehen.

Falls ihr euch Gedanken über die generelle Machbarkeit macht, so seid beruhigt, zumindest die Proxy-Simulation funktioniert bis jetzt wunderbar und das bei 3D-Darstellung und freier Navigation. Es geht eigentlich darum, was ich jetzt habe um zu setzen mit Python und auf dem Server am laufen zu kriegen und die zu übermittelnde Datenmenge soweit zu reduzieren, dass keine zu großen Lags entstehen (wobei kleinere Lags kein Thema sind, wird also keiner erschossen oder so ;) )

So, jetzt mal sehen wer das alles lesen möchte....

Schöne Grüße
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Machbarkeitsanfrage Python oder andere Sprache

Beitragvon gerold » Samstag 26. Januar 2008, 21:51

Hallo Yogi!

Willkommen im Python-Forum!

Yogi hat geschrieben:Ich möchte nun serverseitig die Simulation ständig am laufen haben.

Das kannst du als eigenständiges Programm oder hinter einem Apachen usw. laufen lassen. Das ist kein Problem.


Yogi hat geschrieben:Die Koordinaten der einzelnen Planeten (so ca. 1000) sollen möglichst realtime mäßig an eben so viele Clients übertragen werden, die durch den Raum navigieren können.

Was jetzt? Tragen 1000 Leute einen Laptop durch die Gegend und warten auf Koordinaten vom Server? ???

Realtime ist nicht zu schaffen. Du wirst schon genauer definieren müssen, wie oft pro Sekunde alle 1000 Clients die Koordinaten erreichen müssen. Und willst du die Clients den Server auffordern lassen die Koordinaten zurück zu geben, oder willst du die Koordinaten unaufgefordert an die Clients schicken.

Wenn es schnell sein muss, dann würde ich auf die Anfrage der Clients verzichten und diesen die Koordinaten unaufgefordert übermitteln.

Yogi hat geschrieben:Klar ist, dass ich nicht alle Positionen an alle Clients übertragen kann, deswegen sollen erst einmal nur die Positionen übertragen werden, die in nächster Nähe des Clients sind.

Jetzt scheitert es wieder an meinem Vorstellungsvermögen, da ich ja nicht weiß, was das für Clients sind und wie die so im Kosmos herumirren. Zu Fuß? ;-)

Yogi hat geschrieben:1) Kann ich mein Python-Programm als Applikation auf einem (Apache?)-Server non-stop laufen lassen?

Natürlich geht das. Du kannst ein Programm laufen lassen und den Apachen die Anfragen umleiten lassen. Stichworte: mod_proxy und mod_rewrite.

Außerdem kannst du ein Python-Programm auch als eigenständigen Webserver laufen lassen. Stichworte: WSGI oder CherryPy.

Yogi hat geschrieben:2) Kann ich die Berechnungen so optimieren, dass sie von der Geschwindigkeit her in Richtung C, C++ C#, Java ... gehen?

Das kommt auf die Berechnungen an. Aber du kannst Berechnungen in externe Module auslagern, die in C, C++, usw. geschrieben werden können. Du kannst mit ``ctypes`` auf C-DLLs zugreifen. Du kannst mit pyRex oder Clython, mit einer Python-ähnlichen Programmiersprache, optimierte Module erstellen, die von GCC kompiliert werden. Diese werden wie andere Module in das Programm eingebunden.

Yogi hat geschrieben:4) Ich dachte an die Kombination lighttpd - twinsted - sqlalchemy

Welchen Webserver du benutzt ist egal. Twisted ist kompliziert. Vielleicht brauchst du es gar nicht. SQLAlchemy soll nicht schlecht sein. Aber wenn du Performance brauchst, dann würde ich direkt auf die Datenbanken zugreifen und mit "Stored Procedures", direkt in der Datenbank, arbeiten. Außerdem ist nicht sicher, ob es für dich nicht sogar bessere Datenstrukturen und Datenspeicher gibt. Dazu weiß ich noch zu wenig über dein Projekt.

Yogi hat geschrieben:5) Ich schätze sowas wird nur über einen dedicated Server gehen.

Zu wenig Infos...

.

Was mir jetzt nicht ganz klar wurde: Willst du jetzt eine Website erstellen die von 1000 Browsern abgerufen wird, oder willst du ein optimiertes Serverprogramm, welches Clientprogramme (nicht Browser) mit Daten beliefert?

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Yogi
User
Beiträge: 80
Registriert: Montag 21. Januar 2008, 16:35
Wohnort: Bonner

Beitragvon Yogi » Samstag 26. Januar 2008, 22:58

Hi gerold,

Was jetzt? Tragen 1000 Leute einen Laptop durch die Gegend und warten auf Koordinaten vom Server? ???

Wenn die alle bei Starbuck einen Cappu trinken, dann auch das ;) Eigentlich soll das ein MMO-Teil werden, wobei in der ersten Version erst mal nur reines zuschauen gehen soll. in späteren Versionen folgt dann die Clientseitige Interaktion.

Die Clients können in alles mögliche erstellt sein, sei es rein Browser-Basiert, oder in Flash mit simpler 2D-Darstellung bzw. später als eigenständige Clients mit Full 3D.

Jetzt scheitert es wieder an meinem Vorstellungsvermögen, da ich ja nicht weiß, was das für Clients sind und wie die so im Kosmos herumirren. Zu Fuß?

Die Clients definieren Attribute der Planeten und schauen sich dann die Interaktionen an, können also entweder frei im Raum navigieren bzw. haben den Fokus auf einen Planeten und sehen was drum herum geschieht.

Wenn es schnell sein muss, dann würde ich auf die Anfrage der Clients verzichten und diesen die Koordinaten unaufgefordert übermitteln.

Ich dachte, dass sich die Clients anmelden und dann solange mit Daten versorgt werden bis sie sich entweder ausloggen oder eine gewisse zeit kein Lebenszeichen von sich geben.


Realtime ist nicht zu schaffen

Ich brauche kein Realtime wie bei einem FPS. Da sich alles recht gemächlich bewegt und die Bewegungen auch gut interpoliert werden können, reicht ein 'so schnell wie möglich' also auch einmal pro Sekunde bzw. auch noch ein bisschen langsamer, wenns nicht anders geht.

Welchen Webserver du benutzt ist egal. Twisted ist kompliziert. Vielleicht brauchst du es gar nicht.

Hmmm, ich dachte an Twisted, weil es einige nützliche andere Module integriert hat, chatten z.B. und Mail. Aber da ich momentan noch eine One-Man-Show bin gilt je einfacher desto besser. Nur zuverlässig und performant soll es sein. Skalierbarkeit ist auch ein Thema, d.h mehr als tausend Clients dürfen pro Universum nicht sein, sonst wird die Anzahl der Berechnungen zu hoch. Laut meinen kleinen Test-Benchmarks sind 1000x1000 Clients um Faktor 1000 schneller als dirtekt ein Universum mit 1.000.000 Clients, ist ja logisch bei der o.g. Formel. Gott sei Dank kann ich auf die langsamen trigonometrischen Funktionen verzichten.
Da stellt sich also auch die Frage nach den gleichzeitig möglichen Verbindungen und ob ich virtuelle Server haben kann. Da kenne ich momentan noch viel zu wenig aus...

Aber Summa Summarum scheint Python durchaus dazu in der Lage zu sein, oder? Was spricht denn gegen Python? oder pro Java?

Schöne Grüße
Warhog
User
Beiträge: 11
Registriert: Samstag 26. Januar 2008, 21:53
Kontaktdaten:

Beitragvon Warhog » Sonntag 27. Januar 2008, 00:11

Hi,

zu deiner Performance-/Geschwindigkeitsfrage... Python ist durchaus schnell, Python kompiliert ebenfalls in bytecode und kommt damit an Java heran. Ich würde sogar sagen dass Java und Python näher beieinander sind als Java und C++ (oder C).

Deine Anwendung soll über's Internet, nicht über ein lokales Netzwerk laufen? Ich denke dein Hauptproblem wird dabei wirklich die Bandbreite werden, weswegen die Wahl der Programmiersprache weniger wichtig ist als dein Design des Protokolls mit dem du die Daten übermitteln willst.

An deiner Stelle würde ich glaube ich die Programmteile separieren. Einen Teil der die Positionen der Planeten kalkuliert und fertige "Positionspakete" (protokollnah) organisiert nach Raumsektoren abspeichert, einen anderen der den Clients einfach nur die Sektoren aushändigt die sie benötigen (eben in ihrer Nähe sind). Das Abspeichern auf Festplatte ist zu vermutlich zu langsam/zeitintensiv, also entweder ein großes Programm mit Shared Memory und Threads, oder ein Dateisystem das den Arbeitsspeicher nutzt (UnionFS z.B.) - womit ich zu deiner Frage komme: Linux oder Windows.

Meines Wissens nach ist Windows "besser" im Umgang mit Threads (die du wohl benötigen wirst, insbesondere wenn 1000 Clients auf einen Webserver zugreifen (siehe auch das 10.000-Clients-Problem: http://www.kegel.com/c10k.html ), wobei das differenziert betrachtet werden will. Unter Linux gab es lange Zeit keine einheitliche Thread-API, auch jetzt gibt es die noch nicht. Es gibt Thread-Lösungen die besser sind als unter Windows, es gibt welche die schlechter sind. Allerdings kommt es auf die verwendeten Toolkits an. Ich weiß nicht mit welchen der Python-Interpreter und der Java-Interpreter arbeiten. Was den ganzen Rest angeht, würde ich dir zu Linux raten - für deine Bedürfnisse könntest du's dir schon fast selber kompilieren ;-D, aber da du bestimmt mit deinem Projekt schon ausgelastet genug sein wirst würde ich dir zu einer robusten und gut gewarteten Distribution wie SuSe, Debian oder Gentoo raten (an Performance denkend sowieso Gentoo).

Gruß & Gute Nacht, Warhog

PS: Verstehe ich das eigentlich richtig, dass jeder Client auch eigene Planeten/Objekte mit bestimmten Umlaufbahnen in das System reinsetzen können soll?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Sonntag 27. Januar 2008, 00:46

Hallo Yogi!

Was ist ein "MMO-Teil"?
Was ist ein "FPS"?

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Warhog
User
Beiträge: 11
Registriert: Samstag 26. Januar 2008, 21:53
Kontaktdaten:

Beitragvon Warhog » Sonntag 27. Januar 2008, 00:48

Ich wag's mal zu beantworten ;)

Massive Multiplayer Online (Game) -> wie bsp WOW
und bei FSP tippe ich mal nicht auf Frames per Seconds sondern First Person Shooter ;)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 27. Januar 2008, 00:49

gerold hat geschrieben:Was ist ein "MMO-Teil"?

Massive Multiplayer Online, also der erste Teil von MMORPG.
gerold hat geschrieben:Was ist ein "FPS"?

First Person Shooter.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Beitragvon BlackJack » Sonntag 27. Januar 2008, 00:51

@Warhog: Wenn Du Python mit Java vergleichen willst, musst Du `psyco` dazu nehmen. Java's Bytecode wird zur Laufzeit in der Regel in Maschinensprache übersetzt. Stichwort: "Just In Time"-Compiler.
Warhog
User
Beiträge: 11
Registriert: Samstag 26. Januar 2008, 21:53
Kontaktdaten:

Beitragvon Warhog » Sonntag 27. Januar 2008, 00:52

Lässt man python in parrot laufen geht auch das ;)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Sonntag 27. Januar 2008, 00:57

Leonidas hat geschrieben:
gerold hat geschrieben:Was ist ein "MMO-Teil"?

Massive Multiplayer Online, also der erste Teil von MMORPG.
gerold hat geschrieben:Was ist ein "FPS"?

First Person Shooter.

Hallo Leonidas!

Ach! Und ich dachte wirklich, es soll etwas wissenschaftliches werden. Oder z.B. eine 3D-Planetensimulation für ein modernes Museum. -- Mit Interaktionsmöglichkeiten :|

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Yogi
User
Beiträge: 80
Registriert: Montag 21. Januar 2008, 16:35
Wohnort: Bonner

Beitragvon Yogi » Sonntag 27. Januar 2008, 01:10

Hallo Warhog,

Ich würde sogar sagen dass Java und Python näher beieinander sind als Java und C++ (oder C).

Ich weiss nicht, ob ich das so unterschreiben kann. In einem kleinen Test mit einigen Sprachen, war Java verdammt schnell, bezogen auf Delphi, C#, PureBasic und BlitzMax. Da kam Java wohl zugute, dass es einen JIT-Compiler hat. Aber dieser Test war mit trigonometrischen Funktionen, die ich jetzt doch zum Glück doch nicht brauche.

An deiner Stelle würde ich glaube ich die Programmteile separieren

Ich wollte das durch Threads lösen. Dabei alle Daten im Speicher halten und periodisch die Datenbank aktualisieren.

Der Link zu dem 10.000 Clients Problem ist sehr gut, werde ich mir gründlich durchlesen. Ich hoffe, durch die Beschränkung auf 1000 Clients aber einige Probleme umgehen zu können.

Ich bin mir auch nicht sicher, ob ich pro Client einen Thread aufmachen sollte.

aber da du bestimmt mit deinem Projekt schon ausgelastet genug sein wirst

Da ist wohl was wahres dran ;)
Ich habe mir überlegt Hilfe an Land zu holen, aber scheinbar ist da immer das Ego im Weg zu sein, die beiden, die ich gefragt habe, wollten entweder erst einmal alles platt machen und von Null auf anfangen (Zitat: "ich möchte kein Programmiersklave sein" bzw. "es soll ja auch von mir sein" oder sich direkt mit vollem Mitbestimmungsrecht einsetzen wollen, mit der Anmerkung, dass ich aber drauf gefasst sein sollte, dass das am Ende alle anders aussehen könnte als ich es mir vostelle!

Also ehrlich gesagt, dann krebse ich lieber alleine weiter... wenn ich das System in seinen Grundzügen am laufen habe, kann ich immer noch auf Brautschau gehen.

Oje, das war aber jetzt OT :)

PS: Verstehe ich das eigentlich richtig, dass jeder Client auch eigene Planeten/Objekte mit bestimmten Umlaufbahnen in das System reinsetzen können soll?

Yep! Das erklärt mein Projekt am besten. Natürlich ist es ein bisschen tiefgreifender als das, aber es geht ja um die Anforderungen...

Schöne Grüße

Edit: Eben hat einer das geschrieben.
Besides most MMORPG servers most certainly do not run Linux.

Kann dazu nichts sagen, weiss hier einer mehr??
Ach ja, und dann meinte er, dass Python komplexer wäre als Python, wegen:
It has more features and a different philosophy than Java. Duck typing vs. inheritance, late binding vs. early binding, lambda calculus vs. nothing, the list goes on.


Kann ich auch nix zu sagen. Aber eure Meinung würde mich interessieren.
Zuletzt geändert von Yogi am Sonntag 27. Januar 2008, 01:34, insgesamt 1-mal geändert.
BlackJack

Beitragvon BlackJack » Sonntag 27. Januar 2008, 01:16

@Warhog: Parrot? Soweit ich weiss sind die Bemühungen mit Python eingeschlafen. `psyco` ist dagegen zwar nur für x86 verfügbar, aber eben *verfügbar*.
Yogi
User
Beiträge: 80
Registriert: Montag 21. Januar 2008, 16:35
Wohnort: Bonner

Beitragvon Yogi » Sonntag 27. Januar 2008, 01:42

gerold hat geschrieben:Ach! Und ich dachte wirklich, es soll etwas wissenschaftliches werden. Oder z.B. eine 3D-Planetensimulation für ein modernes Museum. -- Mit Interaktionsmöglichkeiten :|

lg
Gerold
:-)


Es wird zumindest kein Spiel, mehr was psychologisches und gesellschaftliches, wirklich sehr interessant. Aber ich möchte nicht zu viel verraten. Ein geübter Progger hätte das Teil wahrscheinlich in einem Bruchteil meiner Zeit fertig und das täte mir leid :) Ich habe ein Jahr an dem Konzept gearbeitet und erst dann angefangen mit der ersten Umsetzung. Jetzt ist Teil 2 dran, die Umsetzung auf Server/Client. Wenn das dann läuft möchte ich langsam die anderen Funktionalitäten einbauen. Schritt für Schritt, die Komplexität im Griff haben...
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Beitragvon sma » Sonntag 27. Januar 2008, 10:19

Yogi, du sagst fragst, was weniger komplex und für dich besser handhabbar ist: Eine Kombination aus Python und C oder Java. Du willst einen Server schreiben, der möglichst parallel 1000 Planetenbahnen berechnet. Ist das so richtig? Ist das überhaupt ein Problem, dass sich parallelisieren lässt? Ohne genau zu wissen, was da berechnet werden muss, tippe ich darauf, dass dein Bottleneck bei der Übertragung der Planetenpositionen an die Clients (du schriebst etwas von 10.000) liegt. Sind Planetenbahnen nicht etwas, das vorhersagbar ist und das die Clients auch selbst berechnen könnten?

Wenn du die rohe Ausführungsgeschwindigkeit von Java und Python vergleichst, wird IMHO immer Java gewinnen. Ich schätze es eine Größenordnung schneller ein. Müssen nicht gerade Matrixoperationen mit vielen Zugriffen auf Arrays durchgeführt werden, wird die Geschwindigkeit mit der von C vergleichbar sein. Unter Solaris, Linux oder Windows wird auch echtes Multithreading kein Problem sein und du könntest voll von der rohen Rechenleistung eines QuadCore-Prozessors oder einem Cluster aus SPARC-Prozessoren profitieren. Bei 1000 wäre es gerade noch möglich, entsprechend viele Threads zu benutzen, du bräuchtest dann aber sehr viel Hauptspeicher (in der Größenordnung von 2 GB tippe ich). Besser ist wahrscheinlich, mit einer von der Anzahl der Prozessorkerne abhänigen Anzahl von Workerthreads loszulaufen und dann den Code so zu gestalten, dass er in kurzen Segmenten von den Workern bearbeitet werden kann. Das ist leider alles recht kompliziert.

Python + C könnte so schnell wie Java (oder schneller) sein, ist dann aber IMHO nicht so einfach, weil du nicht eine sondern zwei Sprachen beherrschen musst, von denen die eine zwar eleganter als Java, die andere dafür aber noch furchtbarer ist ;) Außerdem ist auf einmal dein Betriebssystem wichtig. Wie einfach die Java-Welt hier sein kann, wurde mir erst bewußt, als ich mit Python angefangen hatte.

Zum Server kann ich nichts weiter sagen, als dass ich da bei Java kein Problem sehen würde. Ich würde wahrscheinlich auf Tomcat oder Jetty aufsetzen, selbst wenn C/S nicht per HTTP sprechen sollen. Vielfach vergessen wird, das Servlets nicht HTTP-spezifisch sind.

Wenn du erstmal, wie du schreibst, austüfteln willst, wie der Server funktioniert, ist wahrscheinlich Python besser zum Experimentieren in dem Sinne, dass du eine wesentlich weniger komplizierte Sprache und Entwicklungsumgebung hast. Java ohne IDE ist unmöglich und Eclipse, Netbeans oder IDEA zu beherrschen, ist ein Unterfangen mit einem Aufwand, der so groß ist wie die Sprache selbst zu lernen. Nicht, dass es das nicht wert wäre - aber es kann vielleicht dazu führen, dass zu späte Erfolgserlebnisse dich das Projekt aufgeben lassen.

Stefan
Yogi
User
Beiträge: 80
Registriert: Montag 21. Januar 2008, 16:35
Wohnort: Bonner

Beitragvon Yogi » Sonntag 27. Januar 2008, 11:14

Hi sma,

die Abhängigkeiten unter den Planeten wird einmal pro Tick berechnet, eine Parallelisierung bringt da glaube ich nichts.

Du hast da Recht, der Bottleneck wird die Übertragung der Positionen zu allen Clients sein. Und es werden maximal immer 1000 sein, 10.000 sind für meine Belange utopisch. Aber selbst bei 1000 kann die Datenmenge zwischen 1-4 MB liegen, unoptimiert natürlich. Und das alles so oft pro Sek wie möglich! Deswegen werde ich im ersten Schritt nur die jeweils angrenzenden Planeten übertragen, das wird die Datenmenge/Sek deutlichst reduzieren. Nach und nach werden ich dann den Radius erweitern. Ich habe da einige Optimierungsmöglichkeiten ausgedacht, aber ich möchte mich nicht jetzt schon damit befassen.

Wenn Python an und für sich, also für die meisten Nicht-Bererechnungsintensiven Teile, unoptimiert bleiben kann und ich also nur die Kräfteberechnungen nach C portieren muss, dann ist das schon ok. Anders wäre es, wenn ich das meiste nach C portieren müsste, dann würde ich doch zu Java tendieren.

Besser ist wahrscheinlich, mit einer von der Anzahl der Prozessorkerne abhänigen Anzahl von Workerthreads loszulaufen und dann den Code so zu gestalten, dass er in kurzen Segmenten von den Workern bearbeitet werden kann. Das ist leider alles recht kompliziert.

Das habe ich prinzipiell verstanden, aber ist denn sowas in Python möglich? Habe da gerade von Stackless Python gelesen, wäre das was?

Sind denn 2GB bei Servern nicht schon beinahe normal?

Ich möchte es halt so konzipieren, dass, wenn es denn Leuten gefällt, ich einfach aufstocken kann. Also ein System, welches erst einmal nur maximal 250 Leuts halten kann und dann komplett neu aufgesetzt werden müsste, wäre für meine Belange nicht tauglich.

Klar wäre auch Java sehr nett, nur ich lese und verstehe Python einfacher als Java. Bei Java fühle ich mich bald erschlagen und da ich das Projekt auch mal fertig stellen möchte, würde ich eine Alternative nicht scheuen ;)
es kann vielleicht dazu führen, dass zu späte Erfolgserlebnisse dich das Projekt aufgeben lassen

Genau!

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]