comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Workqueues in Ada
Date: Sat, 28 Jul 2007 19:28:18 +0200
Date: 2007-07-28T19:28:06+02:00	[thread overview]
Message-ID: <4rvzewqs9ba3$.pluy1xzoi5lr$.dlg@40tude.net> (raw)
In-Reply-To: f8fso9$erg$1@nemesis.news.tpi.pl

On Sat, 28 Jul 2007 17:00:57 +0000 (UTC), Wiktor Moskwa wrote:

> 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 thought Ada.Containers.Doubly_Linked_Lists can move elements between
lists without copying. Have you checked that?

You could also try an alternative implementation of doubly-linked lists and
webs:

http://www.dmitry-kazakov.de/ada/components.htm#Generic_Doubly_Linked_Web

> 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.

Make it a protected object. A worker task calls to an entry of, requesting
an item of work. The entry removes the first item from the list and returns
it to the task via pointer. When the worker task finishes dealing with the
item it calls to a protected object's procedure to queue the item back.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  reply	other threads:[~2007-07-28 17:28 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 [this message]
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
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