Antwort
 
Themen-Optionen
Alt 18.12.2006, 13:25 Nach oben    #1
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard Singleton und Performance

Hallo,
ich habe eine Frage zur Performance und dem Singleton Design Pattern.

Ich habe mal irgendwo (in irgendeinem Thread, Forum weiß ich nicht mehr) gelesen, dass es teilweise gefährlich sein kann, Singletons zu verwenden, da so Engpässe entstehen können oder so in der Art :roll. .

Meine Frage ist nun .. was ist an dem Gerücht dran?
Es geht mir dabei um Pageimpressions in den hohen Hundertausendern pro Tag, falls das helfen sollte.

Ich dachte an Singletons für die Authentifikations- und Session-Klasse.
Wie sind Eure Erfahrungen dazu?

Danke Euch.
Grüße, Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.12.2006, 19:01 Nach oben    #2
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

Erlaube mir die Kack-Noob-Frage: Was zur Hölle soll bitte "singleton" sein?
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.12.2006, 19:29 Nach oben    #3
Gruppenlos
 
Benutzerbild von derMaggus
 
Registriert seit: 24.08.2005
Beiträge: 26
Standard

Singletons bei Wikipedia
__________________
MfG
derMaggus ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.12.2006, 19:29 Nach oben    #4
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.180
Standard

-> http://de.wikipedia.org/wiki/Einzels...wurfsmuster%29

// edit
*grrr* da postet jemand in der gleichen minute wie ich, geht doch mal ned
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.12.2006, 19:35 Nach oben    #5
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 826
Standard

Eines der GoF-Patterns. Von der Klasse existiert maximal eine Instanz un kann von überall her eingebunden werden:

PHP-Code:
<?php

class Singleton
{
    private static 
$Instance null;
  
    private function 
__construct() {}

    public static function 
getInstance()
    {
        if (
is_null(self::$Instance))
            
self::$Instance = new Singleton;

        return 
self::$Instance;
    }

    private function 
__clone() {}
}
Wüsste nicht, was das für Performance-Probleme mit sich bringen sollte.

Basti
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.12.2006, 19:38 Nach oben    #6
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

Äh ja, gut, äh.... Toll, diese Technik habe ich schon vor 2 Jahren angewandt, nur wusste ich nicht, dass es so heißt *gg* Wie doof
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.12.2006, 20:19 Nach oben    #7
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 826
Standard

Drum ist`s sicher nicht schlecht, sich mit den Entwurfsmustern zu befassen. Dann reicht einfach oft ein Wort und alle wissen, was gemeint ist, anstatt erstmal groß erklären zu müssen, wie man etwas umgesetzt hat oder umsetzen will.

Basti
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.12.2006, 21:49 Nach oben    #8
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

@Basti: Mag ja sein, aber wenn du danach gehst, müsste ich fast meine komplette Freizeit, die ich momentan zum Programmieren nutzen kann für die Weiterbildung in der Programmierer-Theorie aufwenden, was dann dazu führen würde, dass ich nurnoch theoretisch programmieren würde.
Naja, wie auch immer
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.12.2006, 00:40 Nach oben    #10
Dejan Spasic
 
Benutzerbild von dejan_spasic
 
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 169
Standard

Zitat:
Zitat von Ben Beitrag anzeigen
Toll. Back to topic.


Ich vermute mal das es nicht stimmt. Ich meine es macht jetzt kein Unterschied,
ob ich eine Instanz einer Klasse mittels dem Schlüsselwort global, oder mittels
dem Singelton-Muster ansprechen kann. Letztenendes ist doch die Instanz der
Klasse die gleiche, egal ob sie nun in einer Klasse als eine Klassenvariable oder im
Globalen-Bereich als "normale" Variable existiert. Oder liege ich mit meiner
Vermutung falsch
__________________
Da wir alle in einem Boot sitzen, ist es gut, dass wir nicht alle auf einer Seite stehen... (mir unbekannt)
dejan_spasic ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.12.2006, 02:13 Nach oben    #11
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Ich glaube es ging eher darum, ob Singeltons generell Performant sind. Egal wie sie aufgerufen werden, oder ob es eher sinnvoll ist, eine neue Instanz zu erzeugen anstelle die alte aufzurufen.
Ich würde hier davon ausgehen, dass es weniger um performance als um speicherbedarf geht. denn du müsstest sichergehen, dass alte instanzen gelöscht werden, da sonst die Klasse 5 mal neu instanziert wird ohne das es jemals sinn gemacht hat, weil nie mehr als eine benutzt wird.

Ich verwende generell Singletons, wenn ich weiß, dass ich nie zeitgleich 2 Instanzen davon brauch. Dazu gehören z.B. Session- und Userverwaltungsklassen.
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.12.2006, 07:03 Nach oben    #12
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Hm, okay.
Wenn es keine grundlegenden Nachteile gibt .. werde ich die wohl verwenden.

Zitat:
Zitat von WarrenFaith Beitrag anzeigen
Ich würde hier davon ausgehen, dass es weniger um performance als um speicherbedarf geht. denn du müsstest sichergehen, dass alte instanzen gelöscht werden, da sonst die Klasse 5 mal neu instanziert wird ohne das es jemals sinn gemacht hat, weil nie mehr als eine benutzt wird.
Hä? Das verhindert doch gerade Singleton-Pattern oder habe ich dich jetzt missverstanden?

Zitat:
Zitat von WarrenFaith Beitrag anzeigen
Ich verwende generell Singletons, wenn ich weiß, dass ich nie zeitgleich 2 Instanzen davon brauch. Dazu gehören z.B. Session- und Userverwaltungsklassen.
Jau, klar .. ich habe nur nicht die Möglichkeit diese Struktur bei in der Spitze 100 Seitenaufrufen in der Sekunde zu testen ... wüsste jedenfalls nicht wie. :-/

Morgen,
Benni.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.12.2006, 09:39 Nach oben    #13
Dejan Spasic
 
Benutzerbild von dejan_spasic
 
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 169
Standard

Zitat:
Zitat von Ben Beitrag anzeigen
Jau, klar .. ich habe nur nicht die Möglichkeit diese Struktur bei in der Spitze 100 Seitenaufrufen in der Sekunde zu testen ... wüsste jedenfalls nicht wie. :-/

Morgen,
Benni.
Mit http_load kannst du dies testen. Ich würde auch einen Profiler wie z.B.
XDegub oder APD empfehlen.

Was auf jedenfall bei der Verwendung
der Sessions wichtig ist, ist die Einstellung der session.save_path
Direktive. Bei mehreren 1000 aufrufen pro Tag sollte man die Option "N" mit
in erwegung ziehen. Hier ein Auschnitt aus php.ini
Zitat:
; As of PHP 4.0.1, you can define the path as:
;
; session.save_path = "N;/path"
;
; where N is an integer. Instead of storing all the session files in
; /path, what this will do is use subdirectories N-levels deep, and
; store the session data in those directories. This is useful if you
; or your OS have problems with lots of files in one directory, and is
; a more efficient layout for servers that handle lots of sessions
Eine weitere Möglichkeit wäre, den /path in den RAM zu laden/mounten.

Dies sind alles Tips aus dem Slide PHP & Performance von Ilia Alshanetsky aus
der Zend Conference. Hier sind noch einige ebenfalls interessante Slides:Mir ist klar, dass mein Post nichts mit dem Singelton-Muster ansich zu tun
hat. Jedoch, geht es hier auch um Prefomence und wie man dies in
weitesten Sinne testen kann (hoffe zumindest das es so ist ).
__________________
Da wir alle in einem Boot sitzen, ist es gut, dass wir nicht alle auf einer Seite stehen... (mir unbekannt)
dejan_spasic ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.12.2006, 09:40 Nach oben    #14
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Jau, herzlichen Dank. Werde ich mich mal durcharbeiten.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.12.2006, 10:02 Nach oben    #15
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Zitat:
Zitat von Ben Beitrag anzeigen
Zitat:
Zitat von WarrenFaith Beitrag anzeigen
Ich würde hier davon ausgehen, dass es weniger um performance als um speicherbedarf geht. denn du müsstest sichergehen, dass alte instanzen gelöscht werden, da sonst die Klasse 5 mal neu instanziert wird ohne das es jemals sinn gemacht hat, weil nie mehr als eine benutzt wird.
Hä? Das verhindert doch gerade Singleton-Pattern oder habe ich dich jetzt missverstanden?
das war ein argument pro Singleton, damit es verhindert wird und der speicherbedarf nicht "explodiert"
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.12.2006, 17:42 Nach oben    #16
Waq
Erfahrener Benutzer
 
Registriert seit: 18.08.2005
Beiträge: 108
Standard

Ob Singletons Performanceprobleme dürfte hochgradig kontext- und architekturabhängig sein.
In einer Java-Anwendung mit vielen Threads müsste z.B. immer am Singleton synchronisiert werden, da muss man schon drüber nachdenken, ob das die richtige Stelle dafür ist.

Wenn man Anwendungen in die Breite skalieren will (viele Server, viele Prozessoren) hat PHP vorgemacht, dass share-nothing-Architekturen vorteilhaft sind, und das Prinzip von Singletons ist nunmal das gemeinsame Nutzen von Ressourcen.
Waq ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.12.2006, 09:55 Nach oben    #17
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Hi Waq,
das klingt jetzt ja eher so, als ob ich die Finger davon lassen sollte.
Zitat:
Zitat von Waq Beitrag anzeigen
Wenn man Anwendungen in die Breite skalieren will (viele Server, viele Prozessoren) hat PHP vorgemacht, dass share-nothing-Architekturen vorteilhaft sind, und das Prinzip von Singletons ist nunmal das gemeinsame Nutzen von Ressourcen.
Könntest du da vielleicht noch etwas genauer drauf eingehen? Inwiefern sind "share-nothing"-Architekturen vorteilhaft?

Danke.
Grüße, Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.12.2006, 10:19 Nach oben    #18
axo
Gast
 
Beiträge: n/a
Standard

den blick auf http://en.wikipedia.org/wiki/Singlet...External_links nicht vergessen
* singleton considered stupid
* singletons cause cancer
* use your singletons wisely

summieren nochmal auf, warum singletons ein problem sein können.

man kann, anstatt wie wild singletons zu basteln, die selbe instanz eines objekts einfach als parameter weitergeben, und hat im prinzip den selben effekt.

singletons sind wirklich nur in besonderen ausnahmefällen sinnvoll, und dann sollte man auch darauf achten, den aufruf meineKlasse::getInstance() so selten wie möglich zu benötigen, sonst kommt man in des teufels küche damit.

grüße
axo
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.12.2006, 10:22 Nach oben    #19
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Alles klar. Da habe ich noch nicht geschaut. Werde ich nachholen und ggf. hier nochmals nachhaken.

Danke.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.12.2006, 18:45 Nach oben    #20
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.110
Standard

Da möchte ich aber widersprechen.

Zum einen wäre es damit notwendig, alle Singletons als Parameter an anderen Klassen/Funktionen zu übergeben, weil man nie wissen kann, ob nach ner Änderungen weiter unten in der Hierarchie nicht doch die Instanz benötigt wird, zum anderen ist der Aufruf einer getInstance-Methode mit Sicherheit nicht in einem relevanten Rahmen aufwendig.

Wenn es von einem Objekt nur eine Instanz geben soll und darf, dann hat das nunmal ein Singleton zu sein. Andernfalls kommst du in Teufels Küche, weil du dann n Objekte mit unterschiedlichem State haben könntest, weil du ab und an mal ne neue Instanz erzeugt hast (warum auch nicht? verbietet dir ja niemand durch nen private Konstruktor und wenn doch ist es ja wieder ein Singleton...).
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

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 aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PEAR-Benchmark nutzen um Performance einer Template-Engine zu messen Ben PEAR, PECL und Frameworks 9 26.02.2007 22:16
getimagesize und Performance ? CIX88 PHP-Programmierung 6 04.05.2006 08:28
[FRAGE] performance von phptags J33d3X PHP-Programmierung 14 30.01.2006 14:52
Performance erhöhen Steve231 Datenbanken 5 18.10.2005 16:39


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:41 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44