comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: RFC: Prototype for a user threading library in Ada
Date: Mon, 11 Jul 2016 14:40:19 -0500
Date: 2016-07-11T14:40:19-05:00	[thread overview]
Message-ID: <nm0sn0$ji$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: nlnl0b$93q$1@gioia.aioe.org

"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message 
news:nlnl0b$93q$1@gioia.aioe.org...
> On 08/07/2016 02:03, Randy Brukardt wrote:
...
>>> Are you not contemplating any real-time systems? If you are, what do you
>>> use instead of priorites, to ensure that urgent activities are done in
>>> time?
>>
>> I'm not contemplating hard-real-time systems (under 10ms response time).
>
> Some of our customers have 0.2ms response time requirement and that not 
> just local but over the network.

Your customers wouldn't be a candidate for this implementation, then.

>> I don't think it is possible to create implementation-independent code 
>> for
>> those sorts of deadlines, and as such it doesn't really matter from a
>> language perspective how that's done (it won't be portable in any case).
>
> I don't see why. Any reasonable implementation would do. An implementation 
> that does not preempt lower priority tasks is not reasonable. If you 
> wanted to push the argument you would end up with disabling hardware 
> interrupts.

Your definition of reasonable and mine are obviously incompatible. Hardware 
interrupts are evil; possibly a necessary evil but still evil and one wants 
to minimize them as much as possible. Obviously you disagree.

>> I'm unconvinced that the way to ensure that "urgent activies" are done is
>> some sort of magic (and priorities are essentially magic). I'd rather 
>> make
>> sure that no task is hogging the system, and avoid overcommitting. That
>> usually happens naturally, and in the unusual case where it doesn't, 
>> there's
>> almost always someplace where adding a synchronization point (usually a
>> "Yield" aka delay 0.0) fixes the problem.
>
> No it does not and it is a *very* bad design, because it distributes 
> making the decision to switch to the parts of the software which must know 
> nothing about the reason when switching is necessary. E.g. that a task 
> solving some differential equation decides whether to switch to the 
> keyboard interrupt handler. That belongs to the keyboard driver, not to 
> the equation solver.

Wrong. In this scheme *all* software switches, all the time. Only the task 
supervisor is making any decisions, but it is getting the opportunity to do 
so at reasonable intervals. Neither the keyboard nor the diffy-Q solver has 
anything to do with it.

I agree that having to put in such choices manually isn't a good idea, but I 
wasn't suggesting that (outside of user-written I/O that doesn't use 
language-defined or implementation-defined libraries). The compiler would do 
it at appropriate points.

> Yield is a premature optimization of worst kind and I bet it is highly 
> inefficient comparing to preemptive scheduling on any modern hardware.

Dunno; it wasn't very efficient on MS-DOS, but the problem there was that 
MS-DOS itself wasn't re-enterant. With multiple threads running at all 
times, the equation is very different.

I don't want to make a claim that it will be better in some sense, the 
experiment has to be done before any answer is known. (Task switching 
appears to be *much* cheaper in this model, so the question remains whether 
that savings makes up for the extra cost.)

> It is just like arguing for return codes over exceptions.

Given that almost none of this is visible to the Ada user, I don't see the 
analogy. (And certainly, return codes are much more efficient than 
exceptions; the problem is the distribution of concerns. That's not 
happening here.)

                                        Randy.



  reply	other threads:[~2016-07-11 19:40 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 [this message]
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