Frage bezüglich Thread



  • Guten Morgen.
    Ich habe eine Frage :

    Ich habe erfolgreich ein Programm mit Thread - Verarbeitung geschrieben. Die Funktionisweise ist nicht wichtig. Ich habe mir die Zeit die zur Abarbeitung mit Threads und ohne benötigt wird angesehen. Dabei ist mir aufgefallen, das die Zeit für Thread verarbeitung 6x so hoch ist.

    Hier ist meine Code :

    Das sind die Thread Funktionen.

    // ==========================================
    
    DWORD WINAPI cVolleyballTrainer::Spiele_Spieltag(LPVOID pr)
    {   
        HANDLE hThread[5];
        for (int i = 0; i < 5; i++)
        {
    		threadLiga *temp = new threadLiga;
            temp->iSpielnummer = i;
            temp->iSpieltag = ((threadLiga*)pr)->iSpieltag;
            temp->pLiga = ((threadLiga*)pr)->pLiga;
    
            hThread[i] = CreateThread(NULL,0,Spiele_Match,(void*)temp,0,NULL);				
        }
    
    	WaitForMultipleObjects(5,hThread, true,INFINITE ); 
        return 1; 
    
    }
    
    // ==========================================
    
    DWORD WINAPI cVolleyballTrainer::Spiele_Match(LPVOID pr)
    {	
    	try
    	{
    
    		cMatch *ma = new cMatch( ((threadLiga*)pr)->pLiga->Get_Ansetzungen( ((threadLiga*)pr)->iSpieltag )[ ((threadLiga*)pr)->iSpielnummer ] );
    
    		((threadLiga*)pr)->pLiga->Set_Ergebnis(ma->Get_Ergebnis());
    
    	}
    	catch(cException *ex)
    	{
    		cout<<ex->sError;
    	}
    
        return 1; 
    }
    
    // ==========================================
    

    Hier Eroflgt der Aufruf per Thread :

    HANDLE hThread[18];
    
        for (int i = 0; i < 18; i++)
        {
            threadLiga *sp = new threadLiga;
            sp->pLiga = pBundesliga;
            sp->iSpieltag = i+1;
    		try
    		{
    			hThread[i] = CreateThread(NULL,0,Spiele_Spieltag,(void*)sp,0,NULL);
    
    		}
    		catch(cException *ex)
    		{
    			cout<<ex->sError;
    		}		
        }
    
    	WaitForMultipleObjects(18,hThread, true,INFINITE );
    

    Und hier sequentiell :_

    for (int a = 0; a < 18; a++)
    	{
    		for (int s = 0; s < 5; s++)
    		{
    			cMatch *ma = new cMatch(pBundesliga->Get_Ansetzungen(a+1)[s]);
    			pBundesliga->Set_Ergebnis(ma->Get_Ergebnis());
    		}
    	}
    

    Ich muss dazu sagen. Beide Durchläufe sind auf dem selben Rechner vorgenommen worden. Es handelt sich hier bei um einen 4 Kern Prozessor..

    WEiß jemnad Rat.

    Vielen Dank
    Eurer Albert



  • Wenn die Aufgabe, die auf mehrere Threads verteilt werden soll, sowieso kaum Zeit verbraucht, dann ist Multi-Threading unnötig und kann durch den Overhead (Threaderstellung...) auch langsamer sein. Übrigens gehört das ins WinAPI-Forum. C++ kennt keine Threads.


  • Mod

    Allein der Overhead den das OS treiben muss einen neuen Stack einzurichten ist im Vergleich zu Deinen Schmalhansaufgaben, die in Deinem Thread laufen schon größer.

    Zudem was nutzt es auf einer 2/4 Prozessor Maschine 200 Threads loszutreten?
    Das macht nur Sinn, wenn die Aufgaben länger sind oder durch I/O Wartezeiten in Kaufgenommen werden müssen. Für das Aufteilen von Rechenaufgaben macht es auch nur Sinn, wenn dadurch die Komplexität gesenkt werden kann. Was ich in Deinem Fall aber auch nicht sehe.

    PS: Falsches Forum (wurde ja schon gesagt)



  • Okay ich danke euch



  • Dieser Thread wurde von Moderator/in Phoemuex aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Verwende doch OpenMP, das löst alle Deine Probleme und ist auf jeden Fall schneller als nur ein Thread 😉


Anmelden zum Antworten