lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On Sun, 2005-01-23 at 19:59, Chris Pressey wrote:

> I don't doubt coroutines complicate the programming model considerably. 
> But I also don't see why coroutines should be necessary for scalability.

They're not: what's necessary is O(1) - O(log n) context
switching. Coroutines provide the possibility -- note,
its just a possibility -- of fast user space context switching.
This seems useful, considering OS switching usually has two
very bad negatives: 

(a) its O(n)

(b) the process code is typically written in  C
    which has a linear stack

Problem (b) rules out any hope of scalability for
C programs on a 32 bit CPU -- there just isn't
enough address space.

> For instance, Erlang doesn't have coroutines, yet YAWS certainly seems
> scalable:
> 
>   http://www.sics.se/~joe/apachevsyaws.html
> 
> The process-oriented approach encouraged by Erlang also means that code
> is quite simple compared to the equivalent done with coroutines - a
> "middleman" process can handle the session-keeping while a "backroom"
> process can seamlessly work within the session, i.e. oblivious to the
> fact that the actual TCP/IP connection comes and goes.

For some problems processes are great! However threads, and coroutines,
have an advantage -- they can share memory without transmitting
data across a link.

I guess for *real* scalability processes are the only
option -- I mean there is a limit to what a single box
can do, after that distributed concurrent processing
is necessary.

-- 
John Skaller, mailto:skaller@users.sf.net
voice: 061-2-9660-0850, 
snail: PO BOX 401 Glebe NSW 2037 Australia
Checkout the Felix programming language http://felix.sf.net