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: Tue, 5 Jul 2016 16:24:02 -0500
Date: 2016-07-05T16:24:02-05:00	[thread overview]
Message-ID: <nlh8hf$p2$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: nl859c$hso$1@gioia.aioe.org

"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message 
news:nl859c$hso$1@gioia.aioe.org...
> On 2016-07-02 06:21, Randy Brukardt wrote:
>> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
>> news:nknteq$177m$1@gioia.aioe.org...
>>> On 2016-06-26 05:09, Randy Brukardt wrote:
>>>> "Hadrien Grasland" <hadrien.grasland@gmail.com> wrote in message
>>>> news:f4c3e42a-1aa1-4667-83d7-de6f81a8fdd2@googlegroups.com...
...
>>> Ah, but there is the reason. The OS can switch threads on I/O events. If
>>> Ada RTS could do this without mapping tasks to threads, fine. Apparently
>>> it cannot without imposing same or higher overhead OS threads have.
>>
>> Dunno; I doubt that it really has been tried. If that was really 
>> impossible,
>> virtualization wouldn't work either, and there's lots of evidence that 
>> works
>> fine.
>
> But it does not, in this sense. It can handle only virtual devices. In 
> order to access a physical one, you need a software layer. It could be 
> quite difficult for the RTS to follow this path.

Not sure why you say that: every RTS that I've ever seen wraps the I/O 
system in a layer, and indeed the OS itself is another such layer. Hard to 
say why thickening the existing layer a bit more would be harmful.

>> The problem (if there is a problem at all) is fast character-at-a-time 
>> I/O -
>> but that's a bad idea for lots of reasons (it doesn't work very well for 
>> a
>> sequential program either) so perhaps it wouldn't matter than much.
>
> It will make normal I/O slower and RTS larger with compatibility issues.

??? I can believe that there is *some* program that would be slower, but I'd 
rather the doubt that most programs would be slower.

I'd look at replacing:
     Read (Handle, Data, Last);
with something like:
     loop
         if Ready (Handle) then
             Read_Ready_Data (Handle, Data, Last);
             exit if Last > Data'Last;
         end if;
         Yield;
     end loop;

The expensive operation would only be called if the I/O isn't ready. And in 
that case, this task has to wait anyway, so the performance of Yield really 
doesn't matter. (It is unlikely to be significant if Read takes 49 or 50 
milliseconds.) So the only possible issue is the underlying cost of "Ready". 
I'd expect that to be cheap (especially if the I/O system is buffering I/O 
anyway), but one would need to try it in real conditions to be sure.

I suppose there is a downside to this scheme, in that user-written I/O (that 
is, directly to devices) also has to be written this way, but that may be a 
small price to pay.

>>> Co-routines could offer something in between.
>>
>> Sure, but I don't see any need to expose that. Certainly not beyond an
>> aspect much like "Inline", which is just a suggestion to the compiler to 
>> do
>> something. It's better to leave implementation decisions (and that's all
>> this is) to implementations!
>
> Well, the difference is that Inline can be safely ignored. Limitation on 
> the task number cannot be.

Same either way - we're "just" talking about performance. (The program will 
work in either case if the advice is ignored.) One has to be careful about 
exposing too much of the mechanism specifically for performance, as that 
almost always harms abstraction.

And, as I pointed out before, performance is never portable. To the extent 
that one depends on performance, it has to be retested and retuned on every 
change (architecture, compiler, even major compiler version).

                               Randy.




  reply	other threads:[~2016-07-05 21:24 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 [this message]
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