Asynchronicity in D
Sean Kelly
sean at invisibleduck.org
Mon Apr 4 14:49:11 PDT 2011
On Apr 1, 2011, at 6:08 PM, Brad Roberts wrote:
> On Fri, 1 Apr 2011, dsimcha wrote:
>
>> On 4/1/2011 7:27 PM, Sean Kelly wrote:
>>> On Apr 1, 2011, at 2:24 PM, dsimcha wrote:
>>>
>>>> == Quote from Brad Roberts (braddr at puremagic.com)'s article
>>>>> I've got an app that regularly runs with hundreds of thousands of
>>>>> connections (though most of them are mostly idle). I haven't seen it
>>>>> break 1M yet, but the only thing stopping it is file descriptor limits
>>>>> and
>>>>> memory. It runs a very standard 1 thread per cpu model. Unfortunatly,
>>>>> not yet in D.
>>>>>
>
> I won't go into the why part, it's not interesting here, and I probably
> can't talk about it anyway.
>
> The simplified view of how: No fibers, just a small number of kernel
> threads (via pthread). An epoll thread that queues tasks that are
> pulled by the 1 per cpu worker threads. The queue is only as big as the
> outstanding work to do. Assuming that the rate of socket events is less
> than the time it takes to deal with the data, the queue stays empty.
>
> It's actually quite a simple architecture at the 50k foot view. Having
> recently hired some new people, I've got recent evidence... it doesn't
> take a lot of time to fully 'get' the network layer of the system.
> There's other parts that are more complicated, but they're not part of
> this discussion.
>
> A thread per socket would never handle this load. Even with a 4k stack
> (which you'd have to be _super_ careful with since C/C++/D does nothing to
> help you track), you'd be spending 4G of ram on just the stacks. And
> that's before you get near the data structures for all the sockets, etc.
I misread your prior post as one thread per socket and was a bit baffled. Makes a lot more sense now. Potentially one read event per socket still means a pretty long queue though.
Regarding the stack size... is that much of an issue with 64-bit processes? Figure a few pages of committed memory per thread plus a large reserved range that shouldn't impact things at all. Definitely more than the event model, but maybe not tremendously so?
More information about the Digitalmars-d
mailing list