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: Wed, 6 Jul 2016 20:00:14 -0500
Date: 2016-07-06T20:00:14-05:00	[thread overview]
Message-ID: <nlk9ir$pmh$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: nlj244$43i$1@gioia.aioe.org

"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message 
news:nlj244$43i$1@gioia.aioe.org...
> On 05/07/2016 23:24, Randy Brukardt wrote:
>> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
...
>> 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.

That's actually an advantage, as it greatly decreases the possibility that 
this task will waste time retrying repeatedly. And it is very rare that it 
would matter (assuming that I/O is properly buffered), as the vast majority 
of I/O will run at full speed, and that which doesn't is very slow 
(relatively speaking) anyway. (i.e., you're waiting for a packet to come 
across a network -- that's a long time -- usually tenths of seconds --  
compared to the slot time.)

Finally, our task supervisor doesn't use slots, and I've spent quite a bit 
of effort avoiding the use of Sleep in Windows such that it would take 
longer than the next delay expiration. It wouldn't be good for a low-power 
application, but I doubt any tasking system would be there.

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

Disagree. My experience with Internet servers is that one can and should use 
relatively long delays in I/O without hurting response times. I think files 
would be similar (although the delays would be smaller). No way to tell for 
sure without building some examples.

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

That would never happen.

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

Usually, compilers just don't inline in such circumstances, and no one 
really cares unless they happen to look at a machine code listing. (Since 
the inlining probably didn't make much difference in the first place.) 
Inline is a suggestion, not a promise (much like Suppress). There's never a 
reason to treat such things as commands.

[Yes, one of the reasons RR doesn't have the sort of customer base that 
AdaCore has is that I'm not willing to implement stupid stuff just because 
some customers are confused. :-)]

> With mapping tasks to threads you fail at run-time, and there is nothing 
> you can do to prevent that from happening.

Certainly not: the threads are all created at program-startup (5 threads for 
4 cores, I think), and the number doesn't change after that, unless one 
calls the library routine for that purpose. That would be a very rare thing, 
and failure wouldn't cause the program to fail, just run slower. An OS that 
didn't allow as many threads as there are cores isn't going to work for this 
system anyway, so the compiler would never exist in the first place. (So 
you'd get your compile-time detection.)

No language-defined I/O (or the sockets library, for that matter) would use 
blocking I/O. User-defined code could, of course, call blocking I/O (that 
being the main reason to allow more threads to be added manually). But it 
would be strongly discouraged.

                                        Randy.


  reply	other threads:[~2016-07-07  1:00 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 [this message]
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