Wieviele Threads gleichzeitig laufen lassen?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Wieviele Threads gleichzeitig laufen lassen?

Beitrag von Josh »

Ich habe mal eine Grundsatzfrage zur Verwendung von Threads. Ich habe mehrere Textdateien die ich einlese und auswerte. Momentan mache ich das ohne Threads, d.h. ich arbeite die Liste der Textdateien der Reihe nach ab.

Bin nun am überlegen, ob ich die verschiedenen Textdateien in verschiedenen Threads abarbeiten soll. Wenn die Maschine nun z.B. nur einen Kern hätte (gibt es ja kaum noch), wäre es sicher Kontraproduktiv, mehrere Threads zu starten. Wahrscheinlich ist es genau so Kontraproduktiv, mehr Threads zu starten, als Kerne im Prozessor sind.

Wie würdet ihr das handhaben? Ein Haupt-Thread, der nur die Verwaltung macht und je vorhandenen Kern (-1 für den Hauptthread) einen Thread zur Auswertung einer Textdatei startet und wenn eine Textdatei fertig bearbeitet ist, wieder einen Thread mit einer neuen Textdatei starten.

Habt Ihr so was schon mal gemacht, oder soll ich einfach brutal für jede Textdatei einen Thread starten, ohne Rücksicht auf die Anzahl der Kerne zu nehmen?
Benutzeravatar
juergenkulow
Beiträge: 188
Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten

Re: Wieviele Threads gleichzeitig laufen lassen?

Beitrag von juergenkulow »

Hallo Josh,
wie lange braucht Dein Programm beim ersten mal um die Textdateien von der Festplatte einzulesen und wie lange braucht Dein Programm für die Auswertung?
Eine Textdatei teilweise von der Festplatte zu lesen, den Lesekopf auf eine andere Textdatei zu setzen und dann die erste Textdatei weiter zu lesen ist sicher nicht optimal.
Der Start eines Threads braucht bei mir etwa 25 Mikrosekunden und 1 MB Speicher für Threadstack.

Gruß
Bitte stelle Deine Fragen, denn den Erkenntnisapparat einschalten entscheidet über das einzig bekannte Leben im Universum.

Jürgen Kulow Wersten :D_üsseldorf NRW D Europa Erde Sonnensystem Lokale_Flocke Lokale_Blase Orion-Arm
Milchstraße Lokale_Gruppe Virgo-Superhaufen Laniakea Sichtbares_Universum
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Wieviele Threads gleichzeitig laufen lassen?

Beitrag von NicTheQuick »

Dateioperationen in Threads auszulagern ist meistens kontraproduktiv, wobei SSDs daran schon einiges geändert haben.
Erzähl uns mal etwas mehr über dein Vorhaben und vor allem die Größe und Anzahl der Daten, damit man abschätzen kann welches Vorgehen sich am ehesten lohnt.
Bild
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Re: Wieviele Threads gleichzeitig laufen lassen?

Beitrag von DarkSoul »

Das mit den Kernen ist richtig. Es können max. soviele parallel Threads laufen, wie der Prozessor Kerne hat. Jeder weitere bringt keinen Vorteil (eher Nachteile).
oder soll ich einfach brutal für jede Textdatei einen Thread starten, ohne Rücksicht auf die Anzahl der Kerne zu nehmen?
Besser nicht.

Mehr Threads als Kerne macht keinen Sinn. Wenn du 5 Threads, aber nur 2 Kerne hast, laufen trotzdem nur max. 2 gleichzeitig. Nicht umsonst kann man bei rechenlastigen Dingen (wie z.B. Videokompression) die Anzahl Threads vorgeben. :)

Wenn du 100 Dateien in eigenen Threads öffnest, hättest du 100 Threads, die sich um die vorhandenen Kerne (und vor allem, und wie auch schon angesprochen, um die Festplatte) Kloppen. Dann passiert in etwa das, was auch passiert, wenn du im Dateimanager 100 Dateien markierst und auf Enter drückst. :mrgreen:

Ich würde mal in den Raum werfen: Einen Thread für dein Hauptprogramm/GUI (den Mainthread, den du sowieso hast) und noch einen weiteren, der die Dateien nacheinander von der Festplatte einliest und verarbeitet. Der Mainthread sagt dann: "Lesethread, lade Datei xyz und gib mir das Ergebnis zurück, sobald du fertig bist.".

Auch wenn das jetzt auf einem Prozessor mit nur einem Kern läuft, ist es trotzem besser, weil sie dann wie beim normalen Multitasking abwechselnd ausgeführt werden und das Hauptprogramm vom User währenddessen weitergenutzt werden kann. :mrgreen:

Die größte Bremse wird ohnehin die Festplatte sein und die ist am schnellsten, wenn nur ein Prozess darauf zugreift. :wink:
Bild
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Wieviele Threads gleichzeitig laufen lassen?

Beitrag von _JON_ »

Einfach mal ausprobieren.

Ich weiß noch wie wird damals über robocopys multithreading option gestaunt haben.
Rechner hatten nur 1 CPU Kern (+HT), aber mit 16 Threads wurde deutlich schneller kopiert.

Gibt halt viele Variablen die da mit reinspielen.
Der Dateisystemtreiber ist auch nicht blöd und springt nicht unnötig auf der Festplatte rum.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Wieviele Threads gleichzeitig laufen lassen?

Beitrag von ccode_new »

Wieviele Threads gleichzeitig laufen lassen?
So viele wie man eben braucht.

Man könnte ja auch das Maximum austesten und sehen was der Stack hergibt.

Im "Normalfall" braucht man aber recht wenig Threads.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Wieviele Threads gleichzeitig laufen lassen?

Beitrag von mk-soft »

Ist kein Problem mit vielen Threads, wenn man viele nennen bei einer meiner Anwendungen darf...

Beispiel:
Pro Kommunikation zu einer Steuer werden immer zwei Threads benötigt. Einen für die Kommunikation und einen als Watchdog.
Zur zeit sind 60 Steuerung eingerichtet und Somit 120 Thread aktiv.
Dazu kommt ein Threads zur bearbeiten der gesammelten Daten und übergibt diese eine Datenbank.

Läuft absolute Störungsfrei und die Belastung der CPU ist sehr Minimal. Unter 1 Prozent bei inaktiver GUI.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Sylvia
verheiratet<br>1. PureGolf-Gewinner
Beiträge: 487
Registriert: 29.08.2004 09:42
Wohnort: Old Europe

Re: Wieviele Threads gleichzeitig laufen lassen?

Beitrag von Sylvia »

Wenn du mal in der Systemsteuerung (bei Windows) unter Leistung nachsiehst, wirst du immer sehen, dass zwischen 1000-2000 Threads am laufen sind. Die Anzahl der Threads ist also grundsätzlich in bestimmen Grenzen "egal" und nicht abhängig von der Anzahl Kerne. Entscheidend ist, was in den Threads gemacht wird.

Wenn in einem Thread auf das Eintreten eines bestimmten System-Ereignisses gewartet wird (wie z.B.die Positionierung des Schreib/lese-Kopfes der Festplatte ), wird DIESER Kern des Prozessors für die nachstehenden Threads ausgebremst.
Basic Pur = PureBasic
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Wieviele Threads gleichzeitig laufen lassen?

Beitrag von ts-soft »

ohne Rücksicht auf die Anzahl der Kerne zu nehmen?
Ja! Es ist die Aufgabe des Betriebssystems, diese geschickt zu verteilen und braucht uns nicht zu kümmern! Denn einzigen Einfluss darauf haben wir, in dem wir mehrere Threads erzeugen, die dann das OS aufteilen kann.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Wieviele Threads gleichzeitig laufen lassen?

Beitrag von Kurzer »

Sylvia hat geschrieben:Wenn du mal in der Systemsteuerung (bei Windows) unter Leistung nachsiehst, wirst du immer sehen, dass zwischen 1000-2000 Threads am laufen sind.
Kurze Frage: Wo genau ist das zu sehen (unter Windows 7)? Ich finde es leider nicht.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Antworten