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: Thu, 7 Jul 2016 16:23:35 +0200
Date: 2016-07-07T16:23:35+02:00	[thread overview]
Message-ID: <nlloma$1vh8$1@gioia.aioe.org> (raw)
In-Reply-To: nlk9ir$pmh$1@franka.jacob-sparre.dk

On 07/07/2016 03:00, Randy Brukardt wrote:
> "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.

Note that the alternative guaranties that there is I/O data ready, 
because the task is waked up by an I/O event rater than by timer. It is 
polling which guaranties wasting time.

But the main problem is latencies. In the query-answer scenario it is 
extremely slow to work this way.

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

That is because there is a human user on the other end. For automatic 
systems such latencies are unacceptable. E.g. the initialization cycle 
of EtherCAT distributed clock is 10_000 send packet/receive packet 
cycles. It would never end with 500ms latencies.

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

How the compiler can predict it will run out of memory?

>> 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),

In that case the compiler must do all system I/O in an asynchronous way 
presenting it as blocking for Ada task. This is what is I would gladly 
have and what will satisfy the OP. The problem is, I suppose, it is not 
what the compiler does.

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

Ah, but that is the point. The tasking model is not allowed to change 
the semantics. This means that if your RTS takes the liberty to use 
single thread for multiple tasks, then it also must convert *all* 
synchronous I/O into asynchronous transparently to the Ada program.

I know that Ada RM does not require it, but I assure you that virtually 
no Ada user will accept anything else.

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


  reply	other threads:[~2016-07-07 14:23 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
2016-07-07 14:23                         ` Dmitry A. Kazakov [this message]
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