Why does std.concurrency.Mailbox use lists ?
badlink via Digitalmars-d
digitalmars-d at puremagic.com
Mon Sep 8 10:06:32 PDT 2014
Hello,
I'm creating a real-time 3D app using std.concurrency for
exchanging messages between the renderer and a few mesher threads.
The app runs fine, but once in a while I get a consistent FPS
drop.
Already aware that the cause is the GC (a call to GC.disable
eliminates the slowdowns) I timed all functions and found that
spawn() sometimes requires more than 50 ms to returns.
I did a quick search through Phobos and found out that the
Mailbox implementation in std.concurency uses a private List
struct where every call to .put() needs to allocate a new node :(
Why is that ?
I would have used for example a ring buffer which can do all the
things the Mailbox needs and faster in every way. The growing
time can be compensated by a right call to setMaxMailboxSize()
and any random removal can be a swap of the last element with the
one being removed.
If I haven't overlooked something, I'd like to fill a performance
bug on Bugzilla.
More information about the Digitalmars-d
mailing list