comp.lang.ada
 help / color / mirror / Atom feed
From: Anh Vo <anhvofrcaus@gmail.com>
Subject: Re: RFC: Prototype for a user threading library in Ada
Date: Tue, 28 Jun 2016 13:44:35 -0700 (PDT)
Date: 2016-06-28T13:44:35-07:00	[thread overview]
Message-ID: <324a8516-b728-4775-854f-fbf411fa7647@googlegroups.com> (raw)
In-Reply-To: <nknrui$15bn$1@gioia.aioe.org>

On Saturday, June 25, 2016 at 11:15:48 PM UTC-7, Dmitry A. Kazakov wrote:
> On 2016-06-26 05:21, Randy Brukardt wrote:
> > "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
> > news:nkl8bm$19q7$1@gioia.aioe.org...
> >> On 2016-06-24 02:38, rieachus@comcast.net wrote:
> >>> I don't get it.  If this is your "motivation":
> >>>
> >>>> The motivation is a two-liner. Let you have some consumer of data:
> >>>>
> >>>>    procedure Write (Buffer : String; Last : out Integer);
> >>>>
> >>>> It may take less than the whole string when called, but will take more
> >>>> data later. So, the parameter Last. Now you want to write a program in a
> >>>> *normal* way:
> >>>>
> >>>>    Write ("This");
> >>>>    Write ("That");
> >>>>
> >>>> That's it.
> >>>
> >>> You may want to make your Last parameter in or in out, but that's a
> >>> detail.
> >>
> >> It is not a detail. The caller of Write does not know how much data the
> >> transport layer is ready to accept. That is the nature of non-blocking
> >> I/O. Write takes as much data it can and tells through Last where the
> >> caller must continue *later*.
> >>
> >> A blocking busy-waiting wrapper looks this way:
> >>
> >>    procedure Write (Buffer : String) is
> >>       First : Integer := Buffer'First;
> >>       Last  : Integer;
> >>    begin
> >>       loop
> >>          Write (Buffer (First..Buffer'Last), Last);
> >>          exit when Last = Buffer'Last;
> >>          First := Last + 1;
> >>       end loop;
> >>    end Write;
> >
> > You forgot the "delay 0.0;"
> 
> I didn't. With yielding processor it would no more be busy-waiting.
> 
> > That, combined with proper tasking runtimes, would seem to provide better
> > results than doing all one thing (task = thread) or all othe ther (some
> > fancy coroutine system).
> 
> Not really. The whole point is that in the imaginary case under 
> consideration you don't need a timer event in order to wake Write up. I 
> presume that there is an I/O event that tells this:
> 
>     procedure Write (Buffer : String) is
>        First : Integer := Buffer'First;
>        Last  : Integer;
>     begin
>        loop
>           Write (Buffer (First..Buffer'Last), Last);
>           exit when Last = Buffer'Last;
>           First := Last + 1;
>           Output_Buffer.Wait_For_State (Not_Full); -- A PO's entry call
>        end loop;
>     end Write;
 
This procedure works correctly if the entire buffer is written. However, it will not work as intended if partial buffer is written first. Thus, the exit statement will never be true. One of the fix is to replace it, after First is recalculated, with "exit when First > Buffer'Last" statement.

Anh Vo


  reply	other threads:[~2016-06-28 20:44 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 [this message]
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
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