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: Sat, 18 Jun 2016 01:16:28 -0700 (PDT)
Date: 2016-06-18T01:16:28-07:00	[thread overview]
Message-ID: <d9d7f8f5-8b72-450b-8152-4b6116c6ce2c@googlegroups.com> (raw)
In-Reply-To: <nk19hh$o33$1@gioia.aioe.org>

Le vendredi 17 juin 2016 18:46:46 UTC+2, Dmitry A. Kazakov a écrit :
> On 2016-06-17 18:18, Niklas Holsti wrote:
> 
> > - First, please do not redefine the word "task", even in the qualified
> > form "asynchronous task". It is quite confusing, in the Ada context.
> 
> Yes.
> 
> > - Second, I question the terminology of "user thread". The "events", or
> > "asynchronous tasks", are not "threads" in the sense of keeping their
> > own machine-level control-flow state; they are automata that are invoked
> > from the "executors" through a single "Run" operation. If some
> > control-flow state must be kept between invocations of "Run", the
> > "asynchronous task" must keep it in Ada-level variables/components.
> >
> > I don't quite know what to call your "events" / "asynchronous tasks",
> > but perhaps the term "work item", which you use in a comment, is better.
> 
> "Event" looks like a plain event (as opposed to a pulse event). 
> "Asynchronous task" looks like a subprogram, not a task proper, not even 
> a co-routine.
> 
> My take on this problematic is that there cannot exist a solution 
> implemented at the library level. All these frameworks maybe fun (for 
> the developer) but useless (horror for the end user) when the key 
> problem is not solved. That is, the control-flow state (as you said) and 
> the stack of the local objects both preserved between scheduling points. 
> This can be done IMO only at the language level as co-routines, 
> non-preemptive, cooperative, user-scheduled tasks, call it as you wish.

I agree that implementation support for coroutines would be extremely valuable, if it were available at the language level (as in Python, C#, Go...) or even in specific implementations (as in Visual C++).

In addition to the benefits you mention, I will also add that a language-level implementation can potentially trap blocking system calls and substitute them with task switches for latency hiding. It will also get wide support from the standard library instead of requiring many custom primitives an wrapper, which means more development time to focus on the core concurrency model.

However, I think that as it stands, we are just about as likely to see it happening in Ada as we are to get lambdas and first-class function objects. So at some point, it is necessary to move on, and try to do what we can at the library level. In my case, state saving is partially available in the sense that any data member of Asynchronous_Task is preserved across iterations, so we do get something relatively straightforward to use, but I will certainly agree that this something is less flexible and pleasant to use than full language-level coroutine/generator support.

If this prototype works well, there is hope to take it further in the long term, though. For example, the productive interaction of HPX with the C++17 commitee has shown that having a working (even if clumsy) implementation of new concurrent primitives is a very strong argument when interacting with a language standardization commitee in order to request new language features that make these primitives easier to implement and use.

And even if we really cannot get the language features, if I get this project far enough to motivate other developers to join, it is also possible to envision implementing architecture- and OS-specific automatic task state saving, as in Intel TBB, which is something which I will refuse to do for now because it is too difficult to handle for a lone developer with a limited base of test hardware.

  reply	other threads:[~2016-06-18  8:16 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 [this message]
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
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