Hallo
Meine Frage:
Es gibt die Windows Funktion CreateThread, mit welcher man innerhalb eines Prozesses(= das Programm) unabhängige Threads(=Multitasking) erzeugen kann.
Habe ich nun ein System mit 2 Prozessoren oder einen Prozessor für multithreading, werden beim Aufruf dieser Funktion auch die Threads auf beide Elemente(Prozessoren oder Thread-Container allgemein) verteilt? System für multithreading bzw. Multiprozessor natürlich vorrausgesetzt.
MfG
Matthias
Hallo,
Windows teilt die Rechenzeit von Threads natürlich auf die zur verfügung stehenden Prozessoren bzw. Prozessorkerne auf. Wie genau die Aufteilung erfolgt, kann ich dir nicht sagen, allerdings sind Situationen denkbar, in denen die Windows-gesteuerte Aufteilung suboptimal sein kann. Hier wäre es dann zB. möglich, einem Prozess einen spezifischen Prozessor(kern) zuzuordnen.
LG
Jochen
Hallo
Erstmal vielen Dank. Das ist auch in etwa dasselbe, was ich vermutet habe.
Nur, wie ordne ich einen Prozess, was wiederum nicht dasselbe ist wie ein Thread, einem bestimmten Prozessorkern zu? Bisher habe ich noch nichts gefunden.
Ich werde aber noch mal schauen.
Meine eigene Idee war es, verschiedene Threads oder Prozesse zu erzeugen, und deren gesamte Performance zu ermitteln, so das nicht verteilte Threads wieder abgeschaltet werden können.
MfG
Matthias
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hi,
Du solltest „_beginthreadex“ statt „CreateThread“ verwenden. Die MSDN schreibt zu CreateThread:
If you use the CreateThread function to create threads, then the C/C++ runtime (CRT) will not get properly initialized on Windows. We recommend that you use the CRT _beginthreadex function instead.
Die Doku zu _beginthreadex gibts hier:
http://msdn2.microsoft.com/en-us/library/kdzttdcb(vs…
Und mit „SetThreadAffinityMask“ kannst Du festlegen, auf welchem Core Dein Thread laufen soll. http://msdn2.microsoft.com/en-us/library/ms686247.aspx
Eine Übersicht über die Prozess/Thread Funktionen gibts hier:
http://msdn2.microsoft.com/en-us/library/ms684847.aspx
Gruss,
Herb
Hallo Herb
Vielen Dank für deinen Artikel(*).
Aufgrund dessen habe ich in meiner eigenen Doku das passende gefunden.
Andere Funktionen zu Threads stehen da auch noch, unter anderem, wie man den Prozessor auswählt.
Ich mache Experimente mit VB.
Da kann ich mit CreateThread inzwischen Multithreading mit u.A. reduzierter Stackgröße realisieren.
Ein Unterprogramm wird dabei ein eigener Thread.
1000 Threads zählen von 0 bis bis irgendwo und lassen sich über eine Globale Variable wieder alle abschalten. Keine Probleme mit Laufzeitumgebung, die braucht nur 1 mal initialisiert zu werden.
Das CRT_… bezieht sich wohl nur auf das C++ und ich kann es somit auch gar nicht aufrufen.
Mit freundlichen Grüßen
Matthias