Efficent handling of sockets

Ken Burtch ken-8VyUGRzHQ8IsA/PxXw9srA at public.gmane.org
Fri Feb 20 14:22:51 UTC 2009


Thanks for everyone's feedback.  It was appreciated.

-----------------------------------------------------------------------------
Ken O. Burtch                                       Phone/Fax: 905-562-0848
   "Linux Shell Scripting with Bash"                  Email: ken-8VyUGRzHQ8IsA/PxXw9srA at public.gmane.org
   "Perl Phrasebook"                 Blog: http://www.pegasoft.ca/coder.html
-----------------------------------------------------------------------------

On Thu, 19 Feb 2009, D. Hugh Redelmeier wrote:

> | From: Lennart Sorensen <lsorense-1wCw9BSqJbv44Nm34jS7GywD8/FfD2ys at public.gmane.org>
>
> | I use pthreads instead, and launch a thread for every incoming request.
> | It might be a problem if you actually have thousands of simultanious
> | connections.
> |
> | Since each thread only has a single connection to listen for, there is
> | no searching needed.
>
> Threads are a very general purpose mechanism and are implemented quite
> expensively compared with a reasonable "get next event" loop.
>
> | I don't like select very much personally.
>
> Why?
>
> But, for high efficiency, with thousands of file descriptors, other
> mechanisms exist that don't have to shovel large bitstrings in and out
> of the kernel at every call.  (I don't do this so I don't remember the
> details. epoll(7), I think, but what horrible man pages.)
>
> | Also with a single thread and select, you can only be processing one
> | request at a time, while with threads you could be using multiple CPUs
> | and handling multiple sockets at once.  Locking of course is an issue
> | to deal with for threaded code.
>
> With select, you can (should) process all the things that come ready at the
> time of the select call returning.  Under load, this is likely to be
> more than one (heck, that is a symptom of heavy load).
>
> This matters because often it is the process switching that is
> expensive rather than the actual transaction processing.
>
> If some (but not all) transactions are expensive to process, they can
> then be farmed off to other threads or processes.
>
> Anecdote:
>
> I first realized this when I talked with the designer of a board to
> handle 64 (I think) serial lines.  I always thought interrupts were
> the way to go, but they found polling worked better for the worst
> case.  If you can handle the worst case, the rest is easy.
> --
> The Toronto Linux Users Group.      Meetings: http://gtalug.org/
> TLUG requests: Linux topics, No HTML, wrap text below 80 columns
> How to UNSUBSCRIBE: http://gtalug.org/wiki/Mailing_lists
>
--
The Toronto Linux Users Group.      Meetings: http://gtalug.org/
TLUG requests: Linux topics, No HTML, wrap text below 80 columns
How to UNSUBSCRIBE: http://gtalug.org/wiki/Mailing_lists





More information about the Legacy mailing list