Aktuelle Zeit: 17.12.2018 11:50

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Wieviele Threads gleichzeitig laufen lassen?
BeitragVerfasst: 05.12.2018 02:34 
Offline
Benutzeravatar

Registriert: 04.08.2009 17:24
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?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wieviele Threads gleichzeitig laufen lassen?
BeitragVerfasst: 05.12.2018 07:47 
Offline
Benutzeravatar

Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten
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ß

_________________
PB Spickzettel

Erkenntnisapparat einschalten entscheidet über das einzig bekannte Leben im sichtbaren Universum.
Bitte Frage fragen.
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wieviele Threads gleichzeitig laufen lassen?
BeitragVerfasst: 05.12.2018 11:02 
Online
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
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.

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 18.04.1 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wieviele Threads gleichzeitig laufen lassen?
BeitragVerfasst: 05.12.2018 13:35 
Offline
Benutzeravatar

Registriert: 19.10.2006 12:51
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).

Zitat:
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wieviele Threads gleichzeitig laufen lassen?
BeitragVerfasst: 05.12.2018 18:17 
Offline
Benutzeravatar

Registriert: 30.03.2010 15:24
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 Falling Bug


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wieviele Threads gleichzeitig laufen lassen?
BeitragVerfasst: 06.12.2018 18:23 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Zitat:
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wieviele Threads gleichzeitig laufen lassen?
BeitragVerfasst: 06.12.2018 23:39 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
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 EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wieviele Threads gleichzeitig laufen lassen?
BeitragVerfasst: 07.12.2018 20:02 
Offline
verheiratet<br>1. PureGolf-Gewinner
Benutzeravatar

Registriert: 29.08.2004 09:42
Wohnort: Old Europe
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wieviele Threads gleichzeitig laufen lassen?
BeitragVerfasst: 07.12.2018 21:58 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Zitat:
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.70 | SpiderBasic 2.10 | Windows 10 Pro (x64) | Linux Mint 19.0 (x64)
"Ich möchte gerne die Welt verändern, doch Gott gibt den Quellcode nicht frei."
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wieviele Threads gleichzeitig laufen lassen?
BeitragVerfasst: 08.12.2018 15:19 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
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!"
PB 5.62, OS: Windows 7 Pro x64, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 50.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye