comp.lang.ada
 help / color / mirror / Atom feed
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."

  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