boost::asio::io_service::strand



  • Ihr versteht nicht worauf ich hinaus will - Anstatt mehrere Threads zu verwenden und mit strand zu wrappen, kann ich gleich direkt nur einen Verwenden. boost::asio wird dennoch intern select, oder eben das Plattform-abhängige Pendant verwenden. Es macht 0 Unterschied... Demnach ist die Klasse zwecklos.



  • 314159265358979 schrieb:

    Ihr versteht nicht worauf ich hinaus will - Anstatt mehrere Threads zu verwenden und mit strand zu wrappen, kann ich gleich direkt nur einen Verwenden. boost::asio wird dennoch intern select, oder eben das Plattform-abhängige Pendant verwenden. Es macht 0 Unterschied... Demnach ist die Klasse zwecklos.

    strand ist mit einem Thread "sinnlos" - aber nicht mit mehreren Threads. strand ist für den Umstand mit den mehreren Threads.



  • Welcher Umstand? Es macht keinen Unterschied, ob 1 Thread oder mehrere + strand. Es kommt aufs selbe raus.



  • 314159265358979 schrieb:

    Es kommt aufs selbe raus.

    Denkst du!



  • Weiß ich.



  • Ich sage ja auch nichts anderes. 🕶

    EDIT:
    Ich muss präzisieren:
    Es macht keinen Unterschied im Bezug auf wiviele Threads gleichzeitig die Handler aufrufen. (1 Thread vs. n Threads + strand)



  • Na welchen Zweck hat das Ding dann?



  • 314159265358979 schrieb:

    Na welchen Zweck hat das Ding dann?

    Na eben: FALLS man mehrere Threads hat UND man möchte, dass die Handler jeweils nur auf einem Thread zur gleichen Zeit aufgerufen werden.



  • Das möchte man aber nicht, weil es sinnlos ist und nur Overhead bringt.



  • warum? der server wird doch schneller wenn mehrere threads die run metthode aufrufen



  • Nö. Das kommt aufs selbe raus, als wenn ich immer abwechselnd mit einem Thread warte und bearbeite.



  • wie du meinst.



  • Wie wäre es, wenn du Handler hast, die synchronisiert werden müssen (da Zugriff auf gemeinsame Resourcen)? Wenn sich z.B. bei deinem IRC-Server ein Client connected und das threadübergreifende Clientarray modifiziert werden soll, möchte das schon synchronisiert sein. Da kannst du entweder einen Mutex nehmen, oder eben einen Strand. Andere Handler, z.B. Empfang einer Nachricht, können möglicherweise parallel ablaufen, da nimmst du den Strand nicht.



  • theta schrieb:

    wie du meinst.

    Theta, lass ihn. 👍
    Er ist zu dumm oder/und ignorant um es zu verstehen.

    Du hast schon mehrmals erwähnt wozu strand gut ist. Anscheinend, hat er noch nie mit Threads und kritischen Bereichen gearbeitet.



  • Es ist doch mittlerweile bekannt das er nur trollen will, da dies ihm am meisten Aufmerksamkeit bringt.



  • Ich arbeite prinzipiell nur mit manuellen Locking, damit mein Code parallel laufen kann.



  • Ach und nochwas: bei einem Strand können durchaus mehrere Handler parallel laufen, nur eben nicht der gleiche (bzw. alle, die durch denselben Strand geschützt sind). Also wird bei dem Server zwar verhindert, dass der Connect-Handler mehrmals parallel ausgeführt wird, es kann sich aber trotzdem ein Client verbinden und gleichzeitig eine Nachricht bearbeitet werden. Das geht bei nur einem Thread nicht.

    trollkenner schrieb:

    Es ist doch mittlerweile bekannt das er nur trollen will, da dies ihm am meisten Aufmerksamkeit bringt.

    Nö, er leidet bloß an starker Selbstüberschätzung. Aber wir sind ja trotzdem hilfsbereit.



  • 314159265358979 schrieb:

    Ich arbeite prinzipiell nur mit manuellen Locking, damit mein Code parallel laufen kann.

    Bei den Strands geht es nicht darum, dass die Netzwerkfunktionen "parallel" arbeiten (also z.B. das von Dir angesprochene select ), sondern um Deine selbstgeschriebenen Handler.
    Der Gag an den Strands ist, dass Du mit nur einem io_service und einem Threadpool, ohne großen Aufwand, sowohl Handler haben kannst, von denen nur jeweils einer aktiv sein kann (diese gehen dann alle durch den gleichen strand), als auch welche, die parallel dazu arbeiten.
    Den Strand brauchst Du dann z.B. wenn mehrere asynchrone Operationen parallel auf die gleiche Ressource zugreifen können, z.B. einen Container.



  • Ich weiß schon. Deshalb schreibe ich auch thread-safe Code. Damit ich keine Beschränkung auf 1 Handler habe. Deshalb benutze ich strand auch nicht. 😉



  • 314159265358979 schrieb:

    Ich weiß schon.

    Du weißt offensichtlich nichts...

    314159265358979 schrieb:

    Deshalb schreibe ich auch thread-safe Code*. Damit ich keine Beschränkung auf 1 Handler habe*. Deshalb benutze ich strand auch nicht. 😉

    [] Du hast verstanden, was ich geschrieben habe.


Anmelden zum Antworten