From: Jacob Sparre Andersen <jacob@jacob-sparre.dk>
Subject: Re: Maximum Number Of Tasks?
Date: Tue, 12 Nov 2013 11:59:13 +0100
Date: 2013-11-12T11:59:13+01:00 [thread overview]
Message-ID: <8738n1hon2.fsf@adaheads.sparre-andersen.dk> (raw)
In-Reply-To: bu-dnfE7TpgzZxzPnZ2dnUVZ_rednZ2d@giganews.com
FritzVonBraun wrote:
> I was wondering about the maximum number of tasks in Ada but I couldnt
> find any info.
Probably because it is both compiler, hardware and operating system
dependent.
> The question is, is a task in Ada technically similar to a thread in
> Windows under the hood?
That depends on which compiler you use. Some (most?) versions of GNAT
use operating system threads to implement tasks. Janus/Ada implements
tasks in its own run-time system.
> Threads are restricted by the stack size that each thread has
> reserved, so in practice the maximum number of threads is about 2000.
I just made a quick test on my laptop. It appears that I can create
32041 tasks before I have to do something special to avoid problems.
The test was done on a Debian 7.2 system with the GNAT 4.6 compiler
distributed with Debian.
The test program:
with Ada.Text_IO; use Ada.Text_IO;
procedure Task_Demo is
task type Demo_Task (Index : Positive) is
entry Stop;
end Demo_Task;
type Demo_Task_Reference is access Demo_Task;
task body Demo_Task is
begin
Put_Line (Positive'Image (Index) & " launched.");
accept Stop;
Put_Line (Positive'Image (Index) & " stopping.");
exception
when others =>
Put_Line (Positive'Image (Index) & " terminated by an exception.");
end Demo_Task;
Collection : array (1 .. 32_041) of Demo_Task_Reference;
begin
for I in Collection'Range loop
Collection (I) := new Demo_Task (Index => I);
end loop;
delay 1.0;
for I in Collection'Range loop
Collection (I).Stop;
end loop;
end Task_Demo;
Reducing the stack size for the individual tasks does not seem to make a
difference.
> The reason I'm asking is that I wonder if Ada provides a more
> comfortable solution to the thread pool problem. In C++ for example I
> create a number of threads roughly equal to the number of processor
> cores and then have a number of Jobs that are distributed over the
> threads and which implement a time sharing system by returning control
> to the thread which then assigns time to another Job.
>
> Would I have to do the same in Ada or are tasks meant to be "micro
> objects' of which many can be created and the Ada runtime does
> effectively what my threadpool system does in C++
That depends on your compiler.
Greetings,
Jacob
--
"Two silk worms had a race. They ended up in a tie."
next prev parent reply other threads:[~2013-11-12 10:59 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-12 9:53 Maximum Number Of Tasks? FritzVonBraun
2013-11-12 10:59 ` Jacob Sparre Andersen [this message]
2013-11-12 12:52 ` Georg Bauhaus
2013-12-06 3:26 ` Brad Moore
2013-11-12 13:21 ` mockturtle
2013-11-12 20:02 ` Ludovic Brenta
2013-11-12 20:04 ` Ludovic Brenta
2013-11-12 15:54 ` Jeffrey Carter
2013-11-12 16:17 ` Dmitry A. Kazakov
2013-11-14 13:00 ` Marius Amado-Alves
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox