comp.lang.ada
 help / color / mirror / Atom feed
From: Hadrien Grasland <hadrien.grasland@gmail.com>
Subject: Re: RFC: Prototype for a user threading library in Ada
Date: Sat, 18 Jun 2016 02:17:03 -0700 (PDT)
Date: 2016-06-18T02:17:03-07:00	[thread overview]
Message-ID: <5b542d7c-e10e-4e3a-b98a-2b538bec0670@googlegroups.com> (raw)
In-Reply-To: <nk31ru$10pb$1@gioia.aioe.org>

Le samedi 18 juin 2016 10:48:00 UTC+2, Dmitry A. Kazakov a écrit :
>
> Regarding system calls, surely there must be a way to make non-blocking 
> system calls looking as if they were blocking. Otherwise the whole idea 
> would make no sense at all.
>
> I don't care much about wrappers, since they can be easily done:
> 
>     procedure Read (Buffer : in out Stream_Element_Array) is
>        Last : Stream_Element_Offset;
>     begin
>        loop
>           Read (File, Buffer, Last); -- Non-blocking
>           exit when Last = Buffer'Last;
>           accept Reschedule; -- Give up until next time
>        end loop;
>     end Read;
> 
> The co-routine body would simply call Read and get all buffer filled.
> 
> A bigger problem is "releasing" a co-routine waiting for an asynchronous 
> system call completion without polling. One solution could be events 
> (protected objects) associated with the state of the non-blocking exchange:
> 
>     procedure Read (Buffer : in out Stream_Element_Array) is
>        Last : Stream_Element_Offset;
>     begin
>        loop
>           Read (File, Buffer, Last);
>           exit when Last = Buffer'Last;
>           File.IO_Event.Signaled; -- "Entry call"
>        end loop;
>     end Read;

Yes, if you control the wrapper responsible for making the "blocking" call, handling caller release is quite easy. You simply launch the nonblocking IO asynchronously, and have the caller task wait for the corresponding event object. When the IO is done, the event is fired, and the "blocked" caller is rescheduled.

But nonblocking IO is something I want to study more during the evolution of this library, as I think it is something which stresses the limits of the event model I propose. Single-shot events are a good fit when a clear notion of task completion exists, but they are less suitable when dealing with continuous processes such as streaming IO.

I do not want to go in the direction of reusable events, as the amount of ways these can go wrong is all but infinite, however there has to be a better synchronization primitive for this kind of progressive evolution.

  reply	other threads:[~2016-06-18  9:17 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 [this message]
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
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