From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: Workqueues in Ada
Date: Sat, 28 Jul 2007 17:54:04 -0400
Date: 2007-07-28T17:54:04-04:00 [thread overview]
Message-ID: <wcck5sk6vpf.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: f8fso9$erg$1@nemesis.news.tpi.pl
Wiktor Moskwa <wiktorDOTmoskwa@gmail.com> writes:
> The problem is that my poor implementation of workqueue is a
> bottleneck. A task takes a unit of work from a queue, processes it
> and puts it back at the and of the queue. Because the queue is
> Ada.Containers.Doubly_Linked_Lists there are lots of memory
> allocations and deallocations - that's a performance problem.
I'm not clear on exactly what you're trying to do, but it sounds like
"units of work" get created and destroyed a lot less often than they get
added to and removed from the queue. Consider using a doubly-linked
list with the links threaded through the units of work, so
adding/removing doesn't need to allocate/free anything -- just stir a
few pointers around.
> I consider making a circular list of nodes with "Next_To_Service"
> pointer going around as nodes are processed. I'll have to make
> sure that one node can be served by only one task at the time
> (probably by marking nodes as being served at the moment).
> New nodes joining and old leaving the system will be more
> difficult to implement correctly, I suppose.
I think the "marking nodes" thing is probably not a good idea.
It's complicated, and it doesn't scale well.
But if you have a max number of items in the queue at any time,
a circular buffer of pointers to units-of-work would do just fine.
The max number could be calculated at run time, and you could
even make it growable, if you wanted to (in which case "max" is a
misnomer. ;-))
- Bob
next prev parent reply other threads:[~2007-07-28 21:54 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-07-28 17:00 Workqueues in Ada Wiktor Moskwa
2007-07-28 17:28 ` Dmitry A. Kazakov
2007-07-28 17:52 ` Wiktor Moskwa
2007-07-28 19:53 ` Simon Wright
2007-07-28 21:25 ` Wiktor Moskwa
2007-07-28 20:45 ` Dmitry A. Kazakov
2007-07-28 21:19 ` Wiktor Moskwa
2007-07-29 8:36 ` Dmitry A. Kazakov
2007-07-29 19:53 ` Wiktor Moskwa
2007-07-30 6:47 ` Niklas Holsti
2007-07-30 15:56 ` Matthew Heaney
2007-07-30 15:53 ` Matthew Heaney
2007-07-30 19:57 ` Wiktor Moskwa
2007-07-30 15:52 ` Matthew Heaney
2007-07-31 20:54 ` Wiktor Moskwa
2007-08-01 8:30 ` Dmitry A. Kazakov
2007-07-28 17:31 ` Jeffrey R. Carter
2007-07-28 17:56 ` Wiktor Moskwa
2007-07-28 20:18 ` Wiktor Moskwa
2007-07-28 20:48 ` Robert A Duff
2007-07-28 21:03 ` Wiktor Moskwa
2007-07-28 21:38 ` Robert A Duff
2007-07-28 22:12 ` Wiktor Moskwa
2007-07-29 0:30 ` Robert A Duff
2007-07-29 6:38 ` Jeffrey R. Carter
2007-07-29 6:34 ` Jeffrey R. Carter
2007-07-29 6:30 ` Jeffrey R. Carter
2007-07-28 21:54 ` Robert A Duff [this message]
2007-07-30 15:48 ` Matthew Heaney
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox