Re: So, Poll is not scalable... what to do?

From: kirk bae
Date: Thu Nov 13 2003 - 18:17:15 EST


Kirk Bae wrote:
If poll is not scalable, which method should I use when writing multithreaded socket server?

People who write multithreaded servers tend to use thread pools
and never need to use poll(). (Well, ok, I've written multithreaded
servers that used poll(), but the threads were there for disk I/O,
not networking.)

By thread pool, do you mean, one thread per socket?, or a work-crew model where a specified number of threads handle many sockets?


What is the most efficient model to use?

Is there a "standard" model to use when writing a scalable multithreaded socket serve such as "io completion ports" on windows?

Depends on your definition of efficient.

If by 'efficient' you mean 'runs like a bat out of hell,
and I don't care how long it takes to write', and
you're willing to write all the code from scratch, and
you're handy with state machines, the right way to go is
an edge-triggered readiness notification method (sys_epoll or kqueue,
if available, else sigio).

My definition of "efficient" is a method that is most widely used or accepted for writing a robust scalable server. So I guess, "'runs like a bat out of hell, and I don't care how long it takes to write'" is close.

Would it be thread pool or epoll? Is it uncommon to mix these two?

Currently, I have a thread-1 calling poll, and dispatching its workload to thread-2 and thread-3 in blocking sockets. I dispatch the workload to worker threads because some of the operations take considerable time.

Is mixing threads with poll uncommon? Is this a bad design? any comments would be appreciated.

_________________________________________________________________
Great deals on high-speed Internet access as low as $26.95. https://broadband.msn.com (Prices may vary by service area.)

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/