comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: RFC: Prototype for a user threading library in Ada
Date: Wed, 6 Jul 2016 15:46:10 +0200
Date: 2016-07-06T15:46:10+02:00	[thread overview]
Message-ID: <nlj244$43i$1@gioia.aioe.org> (raw)
In-Reply-To: nlh8hf$p2$1@franka.jacob-sparre.dk

On 05/07/2016 23:24, Randy Brukardt wrote:
> "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 difference is whether this layer is user- or kernel-space. RTS is 
user-space. Virtualization I/O layer is kernel-space.

>>> 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;

This is in order of several magnitudes slower because after yield to 
return back not before next time slot, e.g. timer interrupt. It is no 
different from polling.

Bit even if RTS had proper drivers on top of the system ones it would 
still greatly slower in most case.

>>>> 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.

Unless the system limit on the number of physical threads apply. And the 
situation is reverse. With inlining you may fail at compile time with 
GNAT when it runts out of memory, and it is recoverable error since you 
can forbid inlining. With mapping tasks to threads you fail at run-time, 
and there is nothing you can do to prevent that from happening.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de


  reply	other threads:[~2016-07-06 13:46 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 [this message]
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