thread vs async



  • Hallo

    den Unterschied von thread und async habe ich noch nicht ganz verstanden.

    #include <iostream>
    #include <thread>
    #include <future>
    
    int main()
    {
        std::cout << "main start" << std::endl;
    
        std::future f1 = std::async([]() { std::cout << "async call" << std::endl; } );
        std::thread t1 = std::thread([]() { std::cout << "thread call" << std::endl; } );
        
        // entweder 
        // warten
        f1.get();
        t1.join();
    
        // -----------------
        // oder
        // nicht warten
        // f1.get(); // einfach get() nicht aufrufen
        t1.detach();
        // -----------------
    
        std::cout << "main end" << std::endl;
    }
    

    In beiden Fällen "warten" oder "nicht warten", verhalten sich doch async und thread gleich. Wann verwende ich denn thread und wann async? Im oberen Beispiel wäre es auf jeden Fall egal. Oder?



  • std::thread ist ein Objekt das bei konstruktion einen Thread startet. std::future ist ein Objekt das irgendwann einen Wert als Ergebnis einer Funktion hält. Alter. Bitte lies eine der diversen Referenzen.



  • Hei alter was geht 🤣

    Eigentlich habe ich ja nicht gefragt was der Unterschied zwischen future und thread ist sondern, welchen Unterschied es im oben genannten Beispiel macht ob ich eine Funktion via thread ausführe oder via async.



  • @booster sagte in thread vs async:

    Hallo

    den Unterschied von thread und async habe ich noch nicht ganz verstanden.
    ...
    Eigentlich habe ich ja nicht gefragt was der Unterschied zwischen future und thread ist

    Aha ... ?



  • Einfach: std::async ist in fast allen Fällen useless.

    Mir fällt nur eine Sache ein und das ist das ausführen einer Liste von sehr heftigen Aufgaben, die es lohnt zu parallelisieren. Allerdings ist das ein schmaler Grad zwischen:

    • Dont bother: Es ist bei fitzelrechnungen mehr aufwand threads zu spawnen und zu joinen, als die Rechnung zu machen.
    • Die Rechnung ist so heftig, dass man gleich OpenMPI benutzt.

    std::future::then hats auch nicht nach C++17 geschafft.



  • @Belli sagte in thread vs async:

    @booster sagte in thread vs async:

    Hallo

    den Unterschied von thread und async habe ich noch nicht ganz verstanden.
    ...
    Eigentlich habe ich ja nicht gefragt was der Unterschied zwischen future und thread ist

    Aha ... ?

    Genau. thread und async war die Frage und nicht thread und future!



  • threads, promises, futures, async, C++
    Vorleseservice biete ich aber keinen.



  • @Swordfish sagte in thread vs async:

    Vorleseservice biete ich aber keinen.

    Schade. Das wäre doch mal mas. Und immer mal wieder gespickt mit Wörtern wie "Alter". 🙂

    Spaß bei seite. Danke für den Link.


Anmelden zum Antworten