php.de

Zurück   php.de > php.de Intern > Off-Topic Diskussionen

Off-Topic Diskussionen Mach mal Pause vom Programmieren!

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 17.11.2010, 22:50  
Erfahrener Benutzer
 
Benutzerbild von _cyrix_
 
Registriert seit: 22.10.2008
Beiträge: 222
PHP-Kenntnisse:
Anfänger
_cyrix_ befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Theoretische Fragen zum Speicherverbrauch

Hallo,

ich bin momentan dabei ein Angriffssystem für ein BG zu schreiben.,.

Dieses System funktioniert auch an sich soweit ganz gut.,.
--> Ressourcenverteilung
--> Kampf- und Überlebensberechnung, etc.,.

Mein Problem ist, wenn ich mit sagen wir mal ca. 100.000 Einheiten unterschiedlichen Types angreife. Liegt der Wert laut memory_get_usage, so im Schnitt bei 100Mb, was leider mein Server zum erliegen bringt. ( Dient ja auch als Testserver ).
Ich gebe alle Variablen, etc. was ich nicht mehr benötige immer sofort frei, trotzdem mache ich leider nur gering, bis keinen Speichergewinn damit.

Dass System soll mal so ausgelegt sein, dass sich darin mehrere Millionen Einheiten bekämpfen können, was dann einen Speicherverbrauch von mehreren GB's ausmacht.

Das Angriffsystem ist auch das einzige, was dann via Cronjob abläuft, da sich dieses einmal pro Min. aktualisieren muss, um die Kämpfe korrekt zu brechnen.

Ist das normal, dass ein BG's solche Hohe Auslastung haben oder gehe ich diese Sache komplett falsch an?

Würde mich freuen, wenn dazu ein paar Kommentare kommen, die mir die Sache etwas näher bringen und mir ggf. helfen könnten. ( Kein Code oder sowas , nur Theorie )

Viele Grüße
__________________
Learning by Doing --> Projekt eigenes BG <--
So lernt man am Besten alle Funktionen und kann sich dadurch viel aneignen --> Closed Beta Test <--
_cyrix_ ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 17.11.2010, 22:59  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

[MOD: verschoben]
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 17.11.2010, 23:06  
Erfahrener Benutzer
 
Benutzerbild von _cyrix_
 
Registriert seit: 22.10.2008
Beiträge: 222
PHP-Kenntnisse:
Anfänger
_cyrix_ befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
[MOD: verschoben]
Entschuldigung für den falschen Bereich.,. Danke fürs korrigieren.,.
__________________
Learning by Doing --> Projekt eigenes BG <--
So lernt man am Besten alle Funktionen und kann sich dadurch viel aneignen --> Closed Beta Test <--
_cyrix_ ist offline   Mit Zitat antworten
Alt 17.11.2010, 23:27  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Wie führst du die Berechnung denn aus?
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 17.11.2010, 23:47  
Erfahrener Benutzer
 
Benutzerbild von _cyrix_
 
Registriert seit: 22.10.2008
Beiträge: 222
PHP-Kenntnisse:
Anfänger
_cyrix_ befindet sich auf einem aufstrebenden Ast
Standard

Die Berechnung läuft über eine separate Funktion, die in einer while Schleife solange durchläuft, bis eine Seite als Sieger hervor geht.

Das eigentliche Problem ist folgendes.,. Was am meisten Speicher raubt.

Ich lasse die Werte die über die Datenbank auslesen.

z.B.: Einheit x = 500 mal vorhanden und dieses dann natürlich für alle Einheiten.

Wert wird in einem mehrdiemensionalem Array gespeichert.
PHP-Code:
Array[] = array('Einheit1' => 500,
                   
'Einheit2' => 350);

// usw... 
Jetzt brauch ich aber für jede Einheit diverse Werte, Sprich Energie um was für eine Einheit es sich handelt, von wo diese kommt, etc.,.

Sieht so aus.,.
PHP-Code:
foreach($Array as $value) {
// In dem Fall, wären dies 850 durchläufe
    
if($value['Einheit1'] != 0) {
        
// hier 500
        
for($i=1$i<=($value['Einheit1']); $i++) {
            
$Einheit[] = array('NR'           => $value['NR'],
                                      
'Her'           => $value['Spieler'],
                                      
'Art'           => 'P',
                                      
'Energie'     => 100);

        }
    }
    if(
$value['Einheit2'] != 0) {
        
// hier 350
        
for($i=1$i<=($value['Einheit2']); $i++) {
            
$Einheit[] = array('NR'           => $value['NR'],
                                      
'Her'           => $value['Spieler'],
                                      
'Art'           => 'M',
                                      
'Energie'     => 100);

        }
    }

__________________
Learning by Doing --> Projekt eigenes BG <--
So lernt man am Besten alle Funktionen und kann sich dadurch viel aneignen --> Closed Beta Test <--

Geändert von _cyrix_ (17.11.2010 um 23:53 Uhr). Grund: Fehler im Code gehabt.,.
_cyrix_ ist offline   Mit Zitat antworten
Alt 18.11.2010, 01:34  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Eigentlich sammelst du da nur Daten, interessant waere die konkrete Berechnung.

Und fass gleiche Einheiten zusammen. Ich kann mir nicht vorstellen, dass da 1 Mio. Unique Einheiten in deiner DB zufleuchen. Auch auf die ellenlangen Arrays wuerde ich verzichten. Rechne gleich zusammen.

Insgesamt sowieso zweifelhaftes Design
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 18.11.2010, 08:40  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Mit dem freigeben von Speicher tut sich PHP bei verschachtelten Objekten schwer, zumindest bei PHP < 5.3. Vielleicht liegt da dein Problem, aber da kann man nur raten. Kannst ja mal http://www.phphatesme.com/blog/wtf/d...ector-von-php/ lesen.
cycap ist offline   Mit Zitat antworten
Alt 18.11.2010, 11:32  
Erfahrener Benutzer
 
Benutzerbild von _cyrix_
 
Registriert seit: 22.10.2008
Beiträge: 222
PHP-Kenntnisse:
Anfänger
_cyrix_ befindet sich auf einem aufstrebenden Ast
Standard

Wie ist das Kampfsystem aufgebaut

--> Es gibt 2 Unterschiedliche Typen --> Fahrzeuge, Fusstruppen und diese sind noch mal unterteilt --> Fahrzeuge 5 und Fusstruppen 7.
--> 2 Parteien // Angreifer und Verteidiger
--> Zusammensetzung in Kurzform
----> Wenn der erste Angriff kommt, wird alles, was innerhalb dieser Minute angreift, zum Angriff gewertet
----> Verteidiger ist ähnlich, unswar werden dort die eigenen Einheiten und die Unterstützungseinheiten zusammengerechnet.
----> Das passiert alles via Sql ( Funktion SUM )

Diese Werte muss ich wie oben geschrieben in einem Array speichern

Die Aufschlüsselung, dass ich dann die einzelnen hochzähle kommt daher, dass im eigentlichen Kampf, immer "Mann gegen Mann" gekämpft wird.
Wenn ich das hier hochzähle, werden im Schnitt immer 1300 Bytes zusätzlich belegt, was bei einer Einheitenmenge von 100k Truppen bei 13MB liegt. Was ja auch in Ordnung wäre, aber ich habe bei dieser Hochzählung schon den Fehler, dass er mir hier mit 55MB und mehr rechnet, was natürlich bei mehreren Einheiten fatal ist.

Die Arrays werden vorm Kampf gemischt, dann tritt Angreifer 1 vs. Verteidiger 1 an usw.! Sind jetzt alle Einheiten einmal durch, aber es haben beide Seiten noch min. 1 Überlebenden, so wird der Kampf erneut stattfinden, bis eine Partei nicht mehr überlebt.

Im Kampf spielen viele Sachen eine Rolle, Verteidigungswerte, Angriffswerte, Forschungswerte, sowie noch die Parameter von Gebäuden, etc.,.

Wenn ich den Code dafür hier schreibe, wird das den Rahmen wohl nen bisschen sprengen.

--

Das mit der Speicherfreigabe ist sehr interessant, meine Php - Version ist 5.2.* irgendwas, mal schauen, ob ich da was durch eine Aktualisierung machen kann.

--

Nachtrag: Ich hab das noch mal durchgerechnet
--> Wenn ich das KS so lasse, wie es ist, dann werden nur beim Zählen von ca. 10mio Truppen, Speicher von ca. 12GB verbraucht und dass dann wohl pro Minute im schlimmsten Fall.
--> Werd mir dann wohl Gedanken machen müssen, die Auslastung zu reduzieren und dass drastisch, weil das wohl nicht sehr gesund und hardwareschonend klingt
__________________
Learning by Doing --> Projekt eigenes BG <--
So lernt man am Besten alle Funktionen und kann sich dadurch viel aneignen --> Closed Beta Test <--

Geändert von _cyrix_ (19.11.2010 um 00:34 Uhr). Grund: Erneute Messungen in der Speicherauslastung
_cyrix_ ist offline   Mit Zitat antworten
Alt 23.11.2010, 13:44  
Erfahrener Benutzer
 
Registriert seit: 02.09.2009
Beiträge: 1.019
PHP-Kenntnisse:
Fortgeschritten
mquadrat befindet sich auf einem aufstrebenden Ast
Standard

Teil das doch in Häppchen auf bzw. mehrere Runden auf. Macht ja keinen Unterschied wenn es immer 1:1 ist.

Je nachdem wie die Berechnung wer gewinnt aussieht, könntest du das ganze auch direkt als Stored Procedure auf der DB ausführen. Oder noch extremer gleich als UDF.
__________________
Wir suchen PHP Entwickler (Vollzeit) im Raum Darmstadt / Rhein-Main. Infos via E-Mail mueller@new-frontiers.de
mquadrat ist offline   Mit Zitat antworten
Alt 24.11.2010, 00:03  
Neuer Benutzer
 
Registriert seit: 24.09.2010
Beiträge: 17
PHP-Kenntnisse:
Anfänger
Grevas befindet sich auf einem aufstrebenden Ast
Standard

1:1 hört sich schon ganz schlimm an,
wenn du tatsächlich dann für jede Einheit die aktuelle 'Energie' speicherst, ist es kein Wunder, dass du so viel Speicher verbrauchst.
Da musst du dir was anderes überlegen.


Hier mal ein Beispielproblem:
Zitat:
Challenge 'Growing Bacteria' [Misc]
Scientists have noted that a member of a strange bacteria species has a cycle of life like this:

Day 1: the bacterium is born from a division of his 'mother'.
Day 2: the bacterium divides itself into two bacteria (one of them is a brand new bacterium).
Day 3: the bacterium divides itself into two bacteria again (one of them is a brand new bacterium).
Day 4: the bacterium has already divided itself twice. Now it's ready to die.
Day 5: the bacterium dies.

A unique member of this kind has been collected by scientists. After 8 days, the population is 47. The question is: after how many days will the entire population of bacteria originated by this unique member reach the count of 1,000,000,000,000?
Wenn du für jede Einzellne Entität die Zustände speicherst, wirst du nicht mal die hälfte schaffen. (Gruppierung nach Entität)
Wenn man aber nach Zuständen gruppiert, klappt es wunderbar.


Da ich davon ausgeh, dass du gerne diese Trennung haben möchtest, behaupte ich einfach mal, dass du ein workaround nehmen musst. Und zwar Gruppen herstellen für die einzelnen Einheiten (die kannst du dann dementsprechend nach einem einzelkampf abschwächen) - mit 1 Eintrag pro Einheit wird es 'leider' nicht funktionieren können.
Grevas ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Performance Fragen jwka61 PHP Tipps 2010 7 17.11.2010 19:48
Erneuern von Fragen DasBlatt PHP Tipps 2010 8 22.02.2010 15:30
ein paar Fragen (wegen eines Loginhistory) Ninos PHP Tipps 2009 5 04.04.2009 14:59
PHP/MySQL Softwareprojekt - grundsätzliche Fragen spacemanspiff Software-Design 1 30.01.2009 14:40
Renommee Funktion wirft Fragen... tomtaz Board-Support 11 02.07.2008 21:18
gettext, einige fragen notyyy PHP Tipps 2008 12 01.05.2008 12:09
viele kleine Fragen... moose PHP Tipps 2006 7 26.05.2006 16:09
2 kleine Fragen: DB-Eintrag/Variable PHP Tipps 2005-2 8 12.10.2005 14:18
Speicherverbrauch nimmt zu Chr!s PHP Tipps 2005-2 2 10.10.2005 19:15
Generelle PHP Fragen Madden PHP-Fortgeschrittene 3 11.04.2005 01:24
[Erledigt] Allgemeine Anfänger Fragen PHP Tipps 2004-2 5 20.12.2004 14:57
Fragen über Fragen :) Igäl PHP Tipps 2004 3 26.08.2004 08:59
Viele Fragen für einen privaten Webserver Server, Hosting und Workstations 15 18.07.2004 22:35
[Erledigt] Fragen über Fragen... wer kann helfen? PHP Tipps 2004 2 08.07.2004 21:12

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
day 1: the bacterium is born from a division of his \'mother\'. day 2: the bacterium divides itself into two bacteria (one of them is a brand new bacterium). day 3: the bacterium divides itself into two bacteria again (one of them is a brand new bacterium, \the bacterium is born from a division of his\, memory_get_usage einheit, scientists have noted that a member of a strange bacteria species has a cycle of life like this, a unique member of this kind has been collected by scientists. after 8 days, the population is 47. the question is: after how many days will the entire population of bacteria originated by this unique member reach the count of 1,000,000,000,000?, \scientists have noted that a member of a strange bacteria species has a cycle of life like this\, growing bacteria 47 1000000000000, \the bacterium divides itself into two bacteria\, day 1: the bacterium is born from a division of his \'mother\'., \a unique member of this kind has been collected by scientists. after 8 days, the population is 47. the question is: after how many days will the entire population of bacteria originated by this unique member reach the count of 1,000,000,000,000?\, challenge \'growing bacteria\' [misc], php objekte speicherverbrauch, growing bacteria \born from a division of his mother\ \1,000,000,000,000\ 5 days

Alle Zeitangaben in WEZ +2. Es ist jetzt 14:17 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum