[Python-ideas] An alternate approach to async IO
sturla at molden.no
Wed Nov 28 01:47:26 CET 2012
Den 28. nov. 2012 kl. 01:15 skrev Trent Nelson <trent at snakebite.org>:
> Right, that's why I proposed using non-Python types as buffers
> whilst in the background IO threads. Once the thread finishes
> processing the event, it pushes the necessary details onto a
> global interlocked list. ("Details" being event type and possibly
> a data buffer if the event was 'data received'.)
> Then, when aio.events() is called, CPython code (holding the GIL)
> does an interlocked/atomic flush/pop_all, creates the relevant
> Python objects for the events, and returns them in a list for
> the calling code to iterate over.
> The rationale for all of this is that this approach should scale
> better when heavily loaded (i.e. tens of thousands of connections
> and/or Gb/s traffic). When you're dealing with that sort of load
> on a many-core machine (let's say 16+ cores), an interlocked list
> is going to reduce latency versus 16+ threads constantly vying for
> the GIL.
Sure, the GIL is a lot more expensive than a simple mutex (or an interlocked list), so avoiding a GIL-release and reacquire on each io completion event might be an advantage.
More information about the Python-ideas