On 9/8/14, 10:06 AM, badlink wrote:
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.
Yah, that does look like a perf bug. Please bugzillize and assign
provisionally to Sean. -- Andrei