AGB  ·  Datenschutz  ·  Impressum  







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

Stack und Multithreading

Ein Thema von Delphi-Laie · begonnen am 11. Okt 2014 · letzter Beitrag vom 11. Okt 2014
Antwort Antwort
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

Stack und Multithreading

  Alt 11. Okt 2014, 18:59
Hallo Delphifreunde!

Gibt es nur einen Stack im Betriebsprogramm / Prozessor, oder wird für jeden Prozeß, womöglich sogar jeden Thread ein eigener Stack angelegt und verwaltet?

Hintergrund: Ich versuchte Quicksort zu parallelisieren. Nach der ersten, der gröbsten Partitionierung der zu sortierenden Ausgangsmenge stehen beide noch zu sortierenden Teilmengen separat zu Verfügung und haben nie wieder etwas miteinander zu tun. Lassen sich demnach parallel sortieren, also jeder in einem eigenen Thread, was ich auch so programmierte. Nur benutzte ich rekursives Quicksort. Da die Ergebnisse lausig waren, kam mir der Verdacht auf, daß beide Threads ein und denselben Stack benutzen (könnten), dann kämen sich je die Stackaufrufe, konkret der Stackabbau ins Gehege.

Da Rekursionen in vielen Prozessen bzw. deren Threads vorkommen können, kann ich mir nicht vorstellen, wie das alles mit nur einem Stack fehlerfrei gelöst werden soll bzw. daß das alles nur mit einem Stack gelöst werden kann. Wie sollten die Stackinhalte dann überhaupt auf die einzelnen Prozesse / Threads wieder zurückübergeben werden?

Wenn es doch separate, threadeigene Stacks gibt, muß der Fehler woanders liegen, ich werde dann weiter probieren.

Besten Dank für Eure Aufmerksamkeit!

Viele Grüße

Delphi-Laie

Geändert von Delphi-Laie (11. Okt 2014 um 19:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: Stack und Multithreading

  Alt 11. Okt 2014, 21:02
Threads laufen im Kontext eines übergeordneten Prozesses und teilen sich den ganzen gemappten/virtuellen Speicher, der dem Prozess zusteht.
Jeder Thread hat seinen eigenen Stack, anders würde es ja auch keinen Sinn machen.
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#3

AW: Stack und Multithreading

  Alt 11. Okt 2014, 21:42
Jeder Thread hat seinen eigenen Stack, anders würde es ja auch keinen Sinn machen
Ja, das ahnte ich und erarbeitete es mir auch halbwegs selbst heraus, aber nun erst ist es gewiß - dafür danke ich Dir!
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Stack und Multithreading

  Alt 11. Okt 2014, 22:17
nicht mehr Threads erzeugen als der Prozessor an logischen Core hat!
Da jeder Thread mit voller CPU-Leistung läuft (Quicksort hat keine IO-Operationen) würden mehr Threads als Cores nur bremsen.

Ich würde es für den Anfang mal mit einer 2-Thread-Lösung für Quicksort versuchen.
Zu Beginn einmal die Partition-Funktion aus führen und dann jeweils einen Thread für jede Hälfte des zu sortierenden Arrays starten.
Jeder der beiden Threads verwendet dann rekursives Quicksort.
Dabei würde ich bei der Partitionierung beim ersten Mal die Bei Google suchenmedian of three Methode verwenden, damit die Daten zwischen den beiden Threads möglicht gut aufgeteilt werden.

Wenn man perfekt machen möchte braucht man einen Threadpool und einen FIFO der von allen Threads benützt wird.
fork me on Github
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#5

AW: Stack und Multithreading

  Alt 11. Okt 2014, 22:27
Alles schon durchdacht: Klar, erstmal 2 Threads zum separaten und erfolgreichen Werkeln bringen, später ggf. mehr. Und mehr Threads als Prozessor(kerne) bremst nur aus, auch klar. Mir geht es aber nicht um Geschwindigkeit, sondern um möglichst gut erkennbare Gleichzeitigkeit. Es geht um mein Projekt "Sortierkino".

Auch Dir danke!
  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 03:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz