AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MemoryLeaks mit s := I.ToString

Ein Thema von Kraisel · begonnen am 7. Nov 2014 · letzter Beitrag vom 12. Nov 2014
Antwort Antwort
Benutzerbild von Kraisel
Kraisel

Registriert seit: 19. Mär 2012
Ort: Bochum-Linden
64 Beiträge
 
Delphi 12 Athens
 
#1

AW: MemoryLeaks mit s := I.ToString

  Alt 8. Nov 2014, 21:58
Für den Thread hast Du völlig recht. Da habe ich mich vielleicht nicht klar genug ausgedrückt, denn ich wollte sicher nicht anregen, dass man Suspend benutzen soll. Ich habe lediglich versucht, die Analogie zum Fiber hergestellt, denn da besteht leider immer das Problem, dass das Ende der Methoden in denen umgeschaltet wird niemals aufgerufen werden, wenn der Fiber gerade beendet wird. Er kann sich leider auch nicht selber beenden. Wenn er das tut, indem er einfach die Methode verlässt, wird der Thread, indem er läuft, beendet, und alle anderen Fiber stehen unkontrolliert in ihrer letzten Umschaltung. Und das ist wohl der großer Nachteil bei Fiber. Man muss alle Spielregeln beachten und genau wissen, was man da darf und was nicht. Wenn man das ignoriert, müllt man sich langfristig den Speicher zu. Ansonsten sind Fiber aber eben wesentlich schneller als Threads. Man kann leider nicht alles haben.

Vielen Dank für alle Hinweise.
Peter Kaisler
Das einzig Komplizierte ist zu begreifen wie einfach es ist.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.535 Beiträge
 
Delphi 12 Athens
 
#2

AW: MemoryLeaks mit s := I.ToString

  Alt 9. Nov 2014, 10:19
OK, der Thread des Fiber darf nicht vom Fiber beendet werden, aber auch der Fiber muß sich selber beenden, indem er selber am Ende eine bestimmte Funktion aufruft.
Von außen darf auch ein Fiber nicht einfach so unkontrolliert angehalten/beendet werden, damit er nicht in einem "ungünstigen" Zustand stehen bleibt.

Egal ob Thread oder Fiber, sobald etwas globales verwendet wird, muß man aufpassen, daß dieses im Moment des Anhaltens nicht benutzt wird,
außer es gibt atomare Locking-/Zugriffsfunktionen und man könnte die Locks von außen freigeben.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 9. Nov 2014 um 10:23 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#3

AW: MemoryLeaks mit s := I.ToString

  Alt 9. Nov 2014, 11:29
Ich hab irgendwie den Eindruck, ihr wisst beide worum es geht und was man Grundsätzlich beachten muss, und redet jetzt nur noch ein bisschen aneinander vorbei. Für Leute ohne Erfahrung mit Nebenläufigkeit ist das sicher interessant, aber ansonsten nicht sonderlich produktiv
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: MemoryLeaks mit s := I.ToString

  Alt 10. Nov 2014, 00:31
Hey, lass uns doch auch mal den Coolen raushängen. Und auch das Nebeneinadervorbeireden birgt ja noch zusätzliches Wissen. Den Beitrag über die Vor- und Nachteile und wann was besser geeignet ist, fand ich interessant.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
2.052 Beiträge
 
Delphi 12 Athens
 
#5

AW: MemoryLeaks mit s := I.ToString

  Alt 10. Nov 2014, 08:28
Ich wusste nicht mal das es Fiber gibt.

Ab wievielen "gleichzeitigen" prozessen lohnt sich jetzt Fiber?

Ich meine, dass die neuen Indy componenten ja auch von einem Thread pro connection geäandert wurden, so dass es da jetzt
einen Context pro Connection und mehrere Contexte in einem Thread gibt.

Mehrere Contexte pro Thread ist ein Indy-Context schon ein Fiber?

Also ab wievielen Verbindungen ist ein Fiber pro Verbindung besser als ein Thread?
Andreas
Nobody goes there anymore. It's too crowded!
  Mit Zitat antworten Zitat
Benutzerbild von Kraisel
Kraisel

Registriert seit: 19. Mär 2012
Ort: Bochum-Linden
64 Beiträge
 
Delphi 12 Athens
 
#6

AW: MemoryLeaks mit s := I.ToString

  Alt 11. Nov 2014, 17:07
Schön, dass es doch noch jemand gibt, der sich für dieses Thema interessiert. Aber es ist richtig, dass im Grunde fast alles gesagt ist, und mit dem ursprünglichen Thema nichts mehr zu tun hat. Über Threads, Fiber und Co. könnte man natürlich stundenlang schreiben.

Aber noch soviel zu den Fragen:

Die Indy-Komponenten kenne ich nicht.

Microsoft gibt an, dass maximal 16 Threads pro CPU laufen sollten, und auch nur dann, wenn alle die meiste Zeit auf etwas warten. Die nackte schnellstmögliche Umschaltung von vier Threads dauert auf meinem PC 2.0..5.0 us je Umschaltung. Wichtig ist auch noch zu wissen, dass ein Thread 5..20ms braucht, um zu starten. Wenn der Thread also nicht schon da ist und läuft, und man glaubt, mal eben einen anonymen Thread parallel laufen zu lassen, wird bitter enttäuscht werden. Alles wird deutlich langsamer als ohne Thread.

Der Fiber ist in Delphi leider ein Windows-Konstrukt und m.E. nicht für Mac oder NewGeneration-Compiler verfügbar. Wie lange er also noch gepflegt wird, weiß leider niemand. Also auch hier Vorsicht bei der Benutzung für neue Anlagen. Aber wenn man ihn benutzt, wird man mit atemberaubender Geschwindigkeit von meist über 100 mal schneller belohnt. Die Nachteile hatte ich ja bereits beschrieben.
Peter Kaisler
Das einzig Komplizierte ist zu begreifen wie einfach es ist.
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
542 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: MemoryLeaks mit s := I.ToString

  Alt 12. Nov 2014, 07:23
Microsoft gibt an, dass maximal 16 Threads pro CPU laufen sollten, und auch nur dann, wenn alle die meiste Zeit auf etwas warten.
Wo? Diese absolute Aussage steht so irgendwo? Kannst Du mir den Link posten?
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
Antwort Antwort

 

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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz