<div>This is interesting - your reference notes that select is discouraged for NON-BLOCKING IO, which it seems to me forces you into polling mode, which is always bad - not only because of busy resource use, but also because of slowness of response since one presumably chains everything off the timer in this case. As for scaling badly, timer ticks that have to check everything every time have the same problem - and there are ways of making an n-fold select loop have n log n overhead instead of n squared.</div>

<div> </div>
<div>What I&#39;m seeing in these Windows notes is &quot;not seeing the forest for the trees&quot; in questions of responsive event programming with multiple inputs. I suspect that, hiding behind it all, the idea that you can have a separate thread for each event is still lurking, but that is only OK if the threads hardly ever share data or timing. The prevalence of non-blocking IO, a.k.a. busy loop, just makes me scratch my head. That just means someone has not finished designing the program.<br>
 </div>
<div>Larry<br> </div>
<div><span class="gmail_quote">On 7/15/09, <b class="gmail_sendername">Kristján Valur Jónsson</b> &lt;<a href="mailto:kristjan@ccpgames.com">kristjan@ccpgames.com</a>&gt; wrote:</span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
<div lang="IS" vlink="purple" link="blue">
<div>
<p><span style="FONT-SIZE: 11pt; COLOR: #1f497d">Also, I‘d like to add that we don‘t generally want to block, even for select().</span></p>
<p><span style="FONT-SIZE: 11pt; COLOR: #1f497d">In our framework, the application may have numerous tasks to do when it is not servicing IO.  This necessitates using select to poll all the sockets, with the associated setup overhead.</span></p>

<p><span style="FONT-SIZE: 11pt; COLOR: #1f497d">select() as such is recognized as scaling badly, even on unix() which is why (I‘ve been told) there are now alternatives for asynchronous IO commonly available on linux.</span></p>

<p><span style="FONT-SIZE: 11pt; COLOR: #1f497d">K</span></p>
<p><span style="FONT-SIZE: 11pt; COLOR: #1f497d"> </span></p>
<div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: blue 1.5pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none">
<div>
<div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: #b5c4df 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; PADDING-TOP: 3pt; BORDER-BOTTOM: medium none">
<p><b><span lang="EN-US" style="FONT-SIZE: 10pt">From:</span></b><span lang="EN-US" style="FONT-SIZE: 10pt"> <a onclick="return top.js.OpenExtLink(window,event,this)" href="mailto:stackless-bounces@stackless.com" target="_blank">stackless-bounces@stackless.com</a> [mailto:<a onclick="return top.js.OpenExtLink(window,event,this)" href="mailto:stackless-bounces@stackless.com" target="_blank">stackless-bounces@stackless.com</a>] <b>On Behalf Of </b>Kristján Valur Jónsson<br>
<b>Sent:</b> 14. júlí 2009 23:08<br><b>To:</b> Larry Dickson 
<div><span class="e" id="q_1227dcb32c8fde56_1"><br><b>Cc:</b> Henning Diedrich; <a onclick="return top.js.OpenExtLink(window,event,this)" href="mailto:stackless@stackless.com" target="_blank">stackless@stackless.com</a><br>
<b>Subject:</b> Re: [Stackless] irc threads</span></div></span>
<p></p></p></div></div>
<div><span class="e" id="q_1227dcb32c8fde56_3">
<p> </p>
<p><span style="FONT-SIZE: 11pt; COLOR: #1f497d">Well, on Windows, one of the rules of efficient network programming is to not use select(). </span></p>
<p><span style="FONT-SIZE: 11pt; COLOR: #1f497d">See:  </span><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://tangentsoft.net/wskfaq/articles/io-strategies.html" target="_blank">http://tangentsoft.net/wskfaq/articles/io-strategies.html</a></p>

<p>and <a onclick="return top.js.OpenExtLink(window,event,this)" href="http://msdn.microsoft.com/en-us/magazine/dvdarchive/cc302334.aspx" target="_blank">http://msdn.microsoft.com/en-us/magazine/dvdarchive/cc302334.aspx</a></p>

<p>select() is discouraged on windows except for compatibility reasons, since it works contrary to the internal IO scheduling mechanisms.</p>
<p> </p>
<p>K</p>
<p><span style="FONT-SIZE: 11pt; COLOR: #1f497d"> </span></p>
<div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: blue 1.5pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none">
<div>
<div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: #b5c4df 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; PADDING-TOP: 3pt; BORDER-BOTTOM: medium none">
<p><b><span lang="EN-US" style="FONT-SIZE: 10pt">From:</span></b><span lang="EN-US" style="FONT-SIZE: 10pt"> Larry Dickson [mailto:<a onclick="return top.js.OpenExtLink(window,event,this)" href="mailto:ldickson@cuttedge.com" target="_blank">ldickson@cuttedge.com</a>] <br>
<b>Sent:</b> 14. júlí 2009 15:34<br><b>To:</b> Kristján Valur Jónsson<br><b>Cc:</b> Henning Diedrich; <a onclick="return top.js.OpenExtLink(window,event,this)" href="mailto:stackless@stackless.com" target="_blank">stackless@stackless.com</a><br>
<b>Subject:</b> Re: [Stackless] irc threads</span></p></div></div>
<p> </p>
<div>
<p>There seems to be a false assumption here: select does not &quot;poll the sockets&quot; (or anything else) and it is not inefficient. In fact, it blocks until one of  the events in question takes place, then reawakens a single process (e.g. main tasklet). This is as efficient as you can get, and &quot;native facilities&quot; are almost certainly just doing the same thing in a hidden place.</p>
</div>
<div>
<p> </p></div>
<div>
<p>Larry Dickson<br>Cutting Edge Networked Storage<br> </p></div>
<div>
<p><span>On 7/9/09, <b>Kristján Valur Jónsson</b> &lt;<a onclick="return top.js.OpenExtLink(window,event,this)" href="mailto:kristjan@ccpgames.com" target="_blank">kristjan@ccpgames.com</a>&gt; wrote:</span> </p>
<p>StacklessIO is written in C++.  It uses native facilities to notify an internal event queue when an IO request has completed, instead of requiring the &quot;main tasklet&quot; to regularly poll the sockets using select() which is inefficient.  This aims to minimize latency and reduce overhead.  It can also use the async. notification facility of the python C api to wake up sleeping tasklets without requiring the main tasklet to poll the event queue.<br>
It is also more &#39;complete&#39; in its emulation of the native socket module, I think.<br>But performance tests by Richard on his module have still shown it to be very capable, and to scale better than threaded solutions like your irc server, so it may well be quite adequate for the task.<br>
<br>K<br><br>&gt; -----Original Message-----<br>&gt; From: Henning Diedrich [mailto:<a onclick="return top.js.OpenExtLink(window,event,this)" href="mailto:hd@authentic-internet.de" target="_blank">hd@authentic-internet.de</a>]<br>
&gt; Sent: 9. júlí 2009 14:02<br>&gt; To: Kristján Valur Jónsson; <a onclick="return top.js.OpenExtLink(window,event,this)" href="mailto:stackless@stackless.com" target="_blank">stackless@stackless.com</a><br>&gt; Subject: Re: [Stackless] irc threads<br>
&gt;<br>&gt;<br>&gt;<br>&gt; Kristján Valur Jónsson wrote:<br>&gt; &gt; Yes, stacklessIO is designed to do that for you, to provide a<br>&gt; transparently tasklet-blocking replacement module for socket and<br>&gt; others.<br>
&gt; &gt; However, I hven&#39;t still managed to release it (although I do intend<br>&gt; to as soon as I can) and it is at them moment Windows only, and likely<br>&gt; to remain so for a bit.<br>&gt; &gt;<br>&gt; &gt; Meanwhile, there is Richard Tew&#39;s async socket implementation.<br>
&gt; &gt;<br>&gt; &gt; K<br>&gt; &gt;<br>&gt;<br>&gt; Thanks for the clarification. What is the difference between<br>&gt; stacklessIO<br>&gt; and Richard&#39;s implementation? This question is probably naive but maybe<br>
&gt; some pointers are possible?<br>&gt;<br>&gt; Thanks,<br>&gt; Henning<br><br><br>_______________________________________________<br>Stackless mailing list<br><a onclick="return top.js.OpenExtLink(window,event,this)" href="mailto:Stackless@stackless.com" target="_blank">Stackless@stackless.com</a><br>
<a onclick="return top.js.OpenExtLink(window,event,this)" href="http://www.stackless.com/mailman/listinfo/stackless" target="_blank">http://www.stackless.com/mailman/listinfo/stackless</a></p></div>
<p> </p></div></span></div></div></div></div></blockquote></div><br>