Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

Threading-Optimierung - Teil 2

von MitgliedThePuppetMasterSeite 4 von 5

Problem umgehen

Umgehen ist eigentlich nicht treffend, da wir das Problem immer noch besitzen werden. Was sich jedoch ändern wird, ist die Zeitspanne, in welcher dieses Problem besteht.

Normalerweise hat das Naniten-Modul die Aufgabe Naniten aus der Linked List zu löschen. Verlegen wir diese Funktion in das Partikel-Modul kann dies deutlich zur Geschwindigkeitssteigerung beitragen.
Eine Variable im Naniten-UDT wird helfen den Lebensstatus einer Nanite zu definieren. So kann der Naniten-Thread einen Status einer Nanite ändern, ohne zu viel Rechenkapazität in Anspruch zu nehmen. Dies steigert zwar nur minimalistisch die Berechnungsgeschwindigkeit, hilft uns aber später massiv weiter.

Durch diese Umschichtung, haben wir eine Primäre Aufgabe einem anderen Thread zugeordnet. Nämlich dem Partikel Thread. Und genau das ist der Knackpunkt!

Dadurch, das der Partikel Berechnungs Thread nun die Hoheitsgewalt über die Erzeugung und Zerstörung einzelner Naniten hat, brauchen wir keine Angst mehr haben, das ein Fremder Thread bei der aufwendigen Kollisionsprüfung den Pointer auf die nächste Nanite zerstört.

Hierdurch haben wir die Möglichkeit geschaffen, das Mutex auf die Naniten noch vor der Berechnung der Kollision wieder frei zu geben! Das macht es möglich, das der Naniten Thread mit der Linked List weiter arbeiten kann, ohne durch ein gelocktes Mutex warten zu müssen.

Folglich ändert sich auf das gesamte Sperr / Entsperr-Modell von einer Vollsperrung zu einer Teilsperrung. Zwar läuft der Gesamtablauf nur noch 'Stockend' voran (um es mal mit einem Stau auf der Autobahn zu vergleichen) aber, er Läuft! Und genau das ist es, was wir brauchen.

Eine Funktion, die Arbeitet, auch wenn sie Eigentlich blockiert sein sollte.



Jetzt ist jedoch unbedingt darauf zu achten, das ausschließlich der Partikelthread, bzw. der Thread, welcher nun die primäre Aufgabe hat, der einzige Thread ist, und bleibt, welcher an der Linked List herum schraubt.
Andernfalls kann es wieder zu einem Wechselseitigem Zugriff kommen oder gar der Programmablauf gedrosselt werden.





 

Gehe zu Seite Gehe zu Seite  1  2  3  4  5  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 05.05.2010 von MitgliedThePuppetMaster angelegt.
  • Die aktuellste Version wurde am 27.05.2010 von Mitgliedfrebas gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen