comp.lang.ada
 help / color / mirror / Atom feed
From: Hadrien Grasland <hadrien.grasland@gmail.com>
Subject: Re: RFC: Prototype for a user threading library in Ada
Date: Sun, 26 Jun 2016 02:09:08 -0700 (PDT)
Date: 2016-06-26T02:09:08-07:00	[thread overview]
Message-ID: <1e32c714-34cf-4828-81fc-6b7fd77e4532@googlegroups.com> (raw)
In-Reply-To: <nknh11$bvg$1@franka.jacob-sparre.dk>

Le dimanche 26 juin 2016 05:09:25 UTC+2, Randy Brukardt a écrit :
> "Hadrien Grasland" wrote in message...
> ...
> >> I'd like to understand better the motivations for these features, so if 
> >> you
> >> (or anyone else) wants to try to explain them to me, feel free. (But keep 
> >> in
> >> mind that I tend to be hard to convince of anything these days, so don't
> >> bother if you're going to give up easily. ;-)
> >
> >See above. Being able to easily write highly concurrent code is of limited 
> >use
> >if said code ends up running with terrible performance because modern OSs
> >are not at all optimized for this kind of workload. We shouldn't need to
> >worry about how our users' OS kernels are setup, and user threading and
> >coroutines are a solution to this problem.
> 
> Only if you want to make the user work even harder than ever.

Not necessarily so, good higher-level abstractions can help here. However, I definitely agree with your following point:


> It seems to me that the problem is with the "typical" Ada implementation 
> more than with the expressiveness of features, when it comes to highly 
> parallel implementations. Mapping tasks directly to OS threads only works if 
> the number of tasks is small. So if it hurts when you do that, then DON'T DO 
> THAT!! :-)

Yes, the problem could be solved at the Ada implementation level. That would also help greatly with the abstraction side of things, as "natural" Ada abstractions could be made to work as expected (see below).

However, any code which relies on this implementation characteristic would then become unportable, unless the standard also imposes that all implementation follow this path. Would that really be a reasonable request to make?


> There's no reason for any particular mapping of Ada tasks to OS threads. I 
> agree with you that the best plan is most likely having a number of threads 
> roughly the same as the number of cores (although that could vary for a 
> highly I/O intensive task). Ada already exposes ways to map tasks to cores, 
> and that clearly could be extended slightly to manage the tasking system's 
> mapping of threads to tasks.
> 
> I use Ada because I want it to prevent or detect all of my programming 
> mistakes before I have to debug something. (I HATE debugging!). I'd like to 
> extend that to parallel programming to the extent possible. I don't want to 
> be adding major new features that will make that harder.

An Ada implementation which would want to make the life of concurrent programmers easier could do the following things:

1/ Keep the amount of OS threads low (about the amount of CPU cores, a bit more for I/O), and map tasks to threads in an 1:N fashion.
2/ Make sure that any Ada feature which blocks tasks does the right thing by switching to another task and taking care of waking up the blocked task later, instead of just blocking the underlying OS thread.
3/ Make sure that the Ada standard library implementation behaves in a similarly sensible way, by replacing blocking system calls with nonblocking alternatives.

That is essentially what the Go programming language designers designed their tasking model, so it is possible to do it in a newly created programming language/implementation. But how hard would it be to retrofit it inside an existing Ada implementation? This I could not tell.

  parent reply	other threads:[~2016-06-26  9:09 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-17  9:44 RFC: Prototype for a user threading library in Ada Hadrien Grasland
2016-06-17 16:18 ` Niklas Holsti
2016-06-17 16:46   ` Dmitry A. Kazakov
2016-06-18  8:16     ` Hadrien Grasland
2016-06-18  8:47       ` Dmitry A. Kazakov
2016-06-18  9:17         ` Hadrien Grasland
2016-06-18 11:53           ` Dmitry A. Kazakov
2016-06-20  8:23             ` Hadrien Grasland
2016-06-20  9:22               ` Dmitry A. Kazakov
2016-06-23  1:42       ` Randy Brukardt
2016-06-23  8:39         ` Dmitry A. Kazakov
2016-06-23 22:12           ` Randy Brukardt
2016-06-24  7:34             ` Dmitry A. Kazakov
2016-06-24 23:00               ` Randy Brukardt
2016-06-25  7:11                 ` Dmitry A. Kazakov
2016-06-26  2:02                   ` rieachus
2016-06-26  6:26                     ` Dmitry A. Kazakov
2016-06-24  0:38           ` rieachus
2016-06-25  6:28             ` Dmitry A. Kazakov
2016-06-26  1:34               ` rieachus
2016-06-26  3:21               ` Randy Brukardt
2016-06-26  6:15                 ` Dmitry A. Kazakov
2016-06-28 20:44                   ` Anh Vo
2016-07-02  4:13                   ` Randy Brukardt
2016-07-02 10:25                     ` Dmitry A. Kazakov
2016-07-05 21:53                       ` Randy Brukardt
2016-07-06  9:25                         ` Dmitry A. Kazakov
2016-07-07  0:32                           ` Randy Brukardt
2016-07-07  6:08                             ` Niklas Holsti
2016-07-08  0:03                               ` Randy Brukardt
2016-07-08  7:32                                 ` Dmitry A. Kazakov
2016-07-11 19:40                                   ` Randy Brukardt
2016-07-12  8:37                                     ` Dmitry A. Kazakov
2016-07-12 21:31                                       ` Randy Brukardt
2016-07-08 20:17                                 ` Niklas Holsti
2016-06-24 21:06         ` Hadrien Grasland
2016-06-26  3:09           ` Randy Brukardt
2016-06-26  6:41             ` Dmitry A. Kazakov
2016-07-02  4:21               ` Randy Brukardt
2016-07-02 10:33                 ` Dmitry A. Kazakov
2016-07-05 21:24                   ` Randy Brukardt
2016-07-06 13:46                     ` Dmitry A. Kazakov
2016-07-07  1:00                       ` Randy Brukardt
2016-07-07 14:23                         ` Dmitry A. Kazakov
2016-07-07 23:43                           ` Randy Brukardt
2016-07-08  8:23                             ` Dmitry A. Kazakov
2016-07-11 19:44                               ` Randy Brukardt
2016-06-26  9:09             ` Hadrien Grasland [this message]
2016-07-02  4:36               ` Randy Brukardt
2016-07-02  5:30                 ` Simon Wright
2016-07-05 21:29                   ` Randy Brukardt
2016-07-02 11:13                 ` Hadrien Grasland
2016-07-02 13:18                   ` Dmitry A. Kazakov
2016-07-02 16:49                     ` Hadrien Grasland
2016-07-02 21:33                       ` Niklas Holsti
2016-07-03 20:56                         ` Hadrien Grasland
2016-07-02 17:26                   ` Niklas Holsti
2016-07-02 21:14                   ` Niklas Holsti
2016-07-03  7:42                     ` Hadrien Grasland
2016-07-03  8:39                       ` Dmitry A. Kazakov
2016-07-03 21:15                         ` Hadrien Grasland
2016-07-04  7:44                           ` Dmitry A. Kazakov
2016-07-05 21:38                   ` Randy Brukardt
2016-06-21  2:40     ` rieachus
2016-06-21  7:34       ` Dmitry A. Kazakov
2016-06-18  7:56   ` Hadrien Grasland
2016-06-18  8:33 ` Hadrien Grasland
2016-06-18 11:38 ` Hadrien Grasland
2016-06-18 13:17   ` Niklas Holsti
2016-06-18 16:27   ` Jeffrey R. Carter
2016-06-20  8:42 ` Hadrien Grasland
2016-07-10  0:45 ` rieachus
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox