That makes sense to me. <div><br></div><div>If I recall, the packet handlers will create more threads if they expect delays, such as when waiting for a client to finish movement into the sim.</div><div><br></div><div>Considering that I have 65 threads running on my standalone instance, with 4 cores that leaves about 15 threads competing.  You have to do the work at some point.  <br>
<br>Matt</div><div><span></span><br>On Friday, April 25, 2014, Dahlia Trimble <<a href="mailto:dahliatrimble@gmail.com">dahliatrimble@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div>Depends on what you mean by "services the packets". Decoding and ACKing could probably work well in a socket read loop but dispatching the packet to the proper part of the simulation could incur many delays which can cause a lot of packet loss in the lower level operating system routines as the buffers are only so large and any excessive data is discarded. Putting them in a queue for another thread to service is a good compromise which tends to keep things working under most load conditions.</div>

<div><br></div>However, if your design seems to improve things under a wide range of operating conditions, feel free to submit a patch! But please don't expect it to be accepted as it may need a *lot* of testing to show it's benefit over the current implementation.<br>

<div><br><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Apr 25, 2014 at 7:45 PM, Matt Lehmann <span dir="ltr"><<a href="javascript:_e(%7B%7D,'cvml','mattlehma@gmail.com');" target="_blank">mattlehma@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p dir="ltr">As of the last release, the algorithm for handling udp packets from clients is as so... </p>
<p dir="ltr">   Start an async read cycle on the socket, adding packets  to a blocking queue.<br>
   Also start a smart thread which waits on the queue and services the packets. </p>
<p dir="ltr">Wouldn't it be more efficient to use a single thread that waits on the socket by looping on a socket.poll call,  immediately servicing packets? </p>
<p dir="ltr">I have tried this locally and I really think it would improve efficiency.   If you want I can submit a patch. </p>
<p dir="ltr">Thanks</p><span><font color="#888888">
<p dir="ltr">Matt</p>
</font></span><br>_______________________________________________<br>
Opensim-dev mailing list<br>
<a href="javascript:_e(%7B%7D,'cvml','Opensim-dev@opensimulator.org');" target="_blank">Opensim-dev@opensimulator.org</a><br>
<a href="http://opensimulator.org/cgi-bin/mailman/listinfo/opensim-dev" target="_blank">http://opensimulator.org/cgi-bin/mailman/listinfo/opensim-dev</a><br>
<br></blockquote></div><br></div>
</blockquote></div>