Announcement

Collapse
No announcement yet.

Threads auf Cores verteilen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Threads auf Cores verteilen?

    Hallo!

    Ich habe ein Programm was aus zwei extrem rechenintensiven Threads besteht. Beide laufen parallel und endlos (bis das Programm geschlossen wird). Das heißt die Threads werden nur einmal bei Programmstart gestartet.

    Um genau zu sein habe ich das Programm selbst, also die Main-Methode und einen zusätzlichen Thread.

    Meine Frage:
    Wenn ich den Thread starte, wird Windows dann automatisch diesen auf den anderen Core legen als die Main Methode? Ich würde es gerne quasi sicherstellen dass der Thread immer auf dem anderen Core läuft.
    Denn beide Threads brauchen 100% Prozessorleistung, daher würde es keinen Sinn machen wenn beide auf einem Core laufen. Wir gehen jetzt mal davon aus dass das System auch mindestens 2 CPUs hat.
    Also kann ich das irgendwie manuell erzwingen dass es auf dem anderen Core läuft oder habe ich da gar keinen Einfluss drauf?

  • #2
    Google mal nach setthreadaffinity.

    Comment


    • #3
      Hm das bringt mich aber nicht wirklich weiter. Ich weiß auch nicht wozu "setthreadaffinity" gehört, zu Threading.Thread schonmal nicht. Und was genau kann und soll man damit einstellen?

      Kann ich sowas machen wie

      Code:
      Dim Core_1 As Integer = CurrentThread.GetCoreID
      If Number_Of_Cores > 1 Then
      MyThread.SetThreadAffinity(Core_1 +1)
      End If
      Oder so ähnlich, jedenfalls soll das die Idee sein.

      Comment


      • #4
        Hallo,

        AFAIK verteilt der Scheduler des Betriebssystems die Threads auf die Cores.

        Beispielsweise läuft dieser Code
        [highlight=vbnet]
        Imports System
        Imports System.Threading

        Namespace ConsoleApplication2
        * * Class Program
        * * * * Private Shared Sub Main(ByVal args As String())
        * * * * * * Dim ts As Thread() = New Thread(1) {}
        * * * * * * For i As Integer = 0 To ts.Length - 1
        * * * * * * * * ts(i) = New Thread([Do])
        * * * * * * * * ts(i).IsBackground = True
        * * * * * * * * ts(i).Start()
        * * * * * * Next
        * * * * * *
        * * * * * * Console.ReadKey()
        * * * * End Sub
        * * * *
        * * * * Private Shared Sub [Do]()
        * * * * * * While True
        * * * * * * * *
        * * * * * * End While
        * * * * End Sub
        * * End Class
        End Namespace
        [/highlight]
        auf beiden Cores auf meinem DualCore-Rechner.

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment

        Working...
        X