<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[boost::asio::io_service::strand]]></title><description><![CDATA[<p>Huhu,</p>
<p>Welchen Zweck hat das Ding eigentlich? Wenn ich meine Handler damit wrappe, wird mir ja garantiert, dass sie nicht parallel aufgerufen werden. Damit verfehlt man doch den Zweck mehrerer Threads. Wozu das Ganze?</p>
<p>Grüße,<br />
PI</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/292824/boost-asio-io_service-strand</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 15:41:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/292824.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 18 Sep 2011 17:41:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 17:41:02 GMT]]></title><description><![CDATA[<p>Huhu,</p>
<p>Welchen Zweck hat das Ding eigentlich? Wenn ich meine Handler damit wrappe, wird mir ja garantiert, dass sie nicht parallel aufgerufen werden. Damit verfehlt man doch den Zweck mehrerer Threads. Wozu das Ganze?</p>
<p>Grüße,<br />
PI</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120938</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 18 Sep 2011 17:41:02 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 18:06:52 GMT]]></title><description><![CDATA[<p>Oftmals ist es nicht nötig, dass die Hander gleichzeitig aufgerufen werden. Gewartet auf Ereignisse oder Empfangen von Daten geschieht ja trotz strand paralell - nur die Aufrufe der Completion-Handlern nicht.</p>
<p><strong>EDIT:</strong><br />
Noch als Anmerkung: Man spart sich zusätzliche Synchronisation.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120956</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sun, 18 Sep 2011 18:06:52 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 18:08:55 GMT]]></title><description><![CDATA[<p>Parallel warten kann ich doch aber genauso mit select().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120958</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 18 Sep 2011 18:08:55 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 18:12:05 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Parallel warten kann ich doch aber genauso mit select().</p>
</blockquote>
<p>Ja, und? Das hat mit strand aber nichts zu tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120960</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sun, 18 Sep 2011 18:12:05 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 18:13:25 GMT]]></title><description><![CDATA[<p>Ja, eben. Deshalb brauche ich strand auch nicht. Anstatt mit mehreren Threads zu warten, nehme ich select() und nur einen Thread. Dazu brauche ich kein strand.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120961</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 18 Sep 2011 18:13:25 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 18:17:04 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Ja, eben. Deshalb brauche ich strand auch nicht.</p>
</blockquote>
<p>Hat die Dokumentation etwa behauptet, du bräuchtest das?<br />
Man kann <code>io_service</code> übrigens auch sehr gut mit nur einem Thread verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120963</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Sun, 18 Sep 2011 18:17:04 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 18:18:27 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Ja, eben. Deshalb brauche ich strand auch nicht. Anstatt mit mehreren Threads zu warten, nehme ich select() und nur einen Thread. Dazu brauche ich kein strand.</p>
</blockquote>
<p>select(..) wird unter anderen Mechanismen auch in Teilen von boost::asio verwendet, jedoch ist das ein Implementationsdetail.</p>
<p>Deine Aussage mal auf boost::asio gemappt:<br />
Wenn nur ein Thread boost::asio::io_service::run() aufruft, brauche ich kein strand, weil alle Handler auf diesem einen Thread aufgerufen werden.</p>
<p>Das gilt natürlich bei mehreren Threads die run() aufrufen nicht mehr - dann kann man eben strand verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120965</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sun, 18 Sep 2011 18:18:27 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 18:20:04 GMT]]></title><description><![CDATA[<p>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.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120968</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 18 Sep 2011 18:20:04 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 18:21:56 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>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.</p>
</blockquote>
<p>strand ist mit einem Thread &quot;sinnlos&quot; - aber nicht mit mehreren Threads. strand ist für den Umstand mit den mehreren Threads.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120969</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sun, 18 Sep 2011 18:21:56 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 18:23:01 GMT]]></title><description><![CDATA[<p>Welcher Umstand? Es macht keinen Unterschied, ob 1 Thread oder mehrere + strand. Es kommt aufs selbe raus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120970</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 18 Sep 2011 18:23:01 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 18:26:06 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Es kommt aufs selbe raus.</p>
</blockquote>
<p>Denkst du!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120973</guid><dc:creator><![CDATA[3,1]]></dc:creator><pubDate>Sun, 18 Sep 2011 18:26:06 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 18:26:32 GMT]]></title><description><![CDATA[<p>Weiß ich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120974</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120974</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 18 Sep 2011 18:26:32 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 18:30:11 GMT]]></title><description><![CDATA[<p>Ich sage ja auch nichts anderes. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p><strong>EDIT:</strong><br />
Ich muss präzisieren:<br />
Es macht keinen Unterschied im Bezug auf wiviele Threads gleichzeitig die Handler aufrufen. (1 Thread vs. n Threads + strand)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120975</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sun, 18 Sep 2011 18:30:11 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 18:29:24 GMT]]></title><description><![CDATA[<p>Na welchen Zweck hat das Ding dann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120976</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 18 Sep 2011 18:29:24 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 18:33:32 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Na welchen Zweck hat das Ding dann?</p>
</blockquote>
<p>Na eben: FALLS man mehrere Threads hat UND man möchte, dass die Handler jeweils nur auf einem Thread zur gleichen Zeit aufgerufen werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120979</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sun, 18 Sep 2011 18:33:32 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 18:34:28 GMT]]></title><description><![CDATA[<p>Das möchte man aber nicht, weil es sinnlos ist und nur Overhead bringt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120980</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 18 Sep 2011 18:34:28 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 18:36:27 GMT]]></title><description><![CDATA[<p>warum? der server wird doch schneller wenn mehrere threads die run metthode aufrufen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120981</guid><dc:creator><![CDATA[gpp]]></dc:creator><pubDate>Sun, 18 Sep 2011 18:36:27 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 18:37:54 GMT]]></title><description><![CDATA[<p>Nö. Das kommt aufs selbe raus, als wenn ich immer abwechselnd mit einem Thread warte und bearbeite.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120982</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 18 Sep 2011 18:37:54 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 18:43:23 GMT]]></title><description><![CDATA[<p>wie du meinst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120985</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sun, 18 Sep 2011 18:43:23 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 18:54:14 GMT]]></title><description><![CDATA[<p>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.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120986</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Sun, 18 Sep 2011 18:54:14 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 18:55:16 GMT]]></title><description><![CDATA[<p>theta schrieb:</p>
<blockquote>
<p>wie du meinst.</p>
</blockquote>
<p>Theta, lass ihn. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
Er ist zu dumm oder/und ignorant um es zu verstehen.</p>
<p>Du hast schon mehrmals erwähnt wozu strand gut ist. Anscheinend, hat er noch nie mit Threads und kritischen Bereichen gearbeitet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120988</guid><dc:creator><![CDATA[IgnosSterbenFrüher]]></dc:creator><pubDate>Sun, 18 Sep 2011 18:55:16 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 18:57:23 GMT]]></title><description><![CDATA[<p>Es ist doch mittlerweile bekannt das er nur trollen will, da dies ihm am meisten Aufmerksamkeit bringt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120991</guid><dc:creator><![CDATA[trollkenner]]></dc:creator><pubDate>Sun, 18 Sep 2011 18:57:23 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 18:58:29 GMT]]></title><description><![CDATA[<p>Ich arbeite prinzipiell nur mit manuellen Locking, damit mein Code parallel laufen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120992</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 18 Sep 2011 18:58:29 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Sun, 18 Sep 2011 19:00:05 GMT]]></title><description><![CDATA[<p>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.</p>
<p>trollkenner schrieb:</p>
<blockquote>
<p>Es ist doch mittlerweile bekannt das er nur trollen will, da dies ihm am meisten Aufmerksamkeit bringt.</p>
</blockquote>
<p>Nö, er leidet bloß an starker Selbstüberschätzung. Aber wir sind ja trotzdem hilfsbereit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120996</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Sun, 18 Sep 2011 19:00:05 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Mon, 19 Sep 2011 06:29:14 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Ich arbeite prinzipiell nur mit manuellen Locking, damit mein Code parallel laufen kann.</p>
</blockquote>
<p>Bei den Strands geht es nicht darum, dass die Netzwerkfunktionen &quot;parallel&quot; arbeiten (also z.B. das von Dir angesprochene <code>select</code> ), sondern um Deine selbstgeschriebenen Handler.<br />
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.<br />
Den Strand brauchst Du dann z.B. wenn mehrere asynchrone Operationen parallel auf die gleiche Ressource zugreifen können, z.B. einen Container.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121112</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 19 Sep 2011 06:29:14 GMT</pubDate></item><item><title><![CDATA[Reply to boost::asio::io_service::strand on Mon, 19 Sep 2011 07:34:41 GMT]]></title><description><![CDATA[<p>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. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2121123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2121123</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 19 Sep 2011 07:34:41 GMT</pubDate></item></channel></rss>