From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: RFC: Prototype for a user threading library in Ada
Date: Sat, 18 Jun 2016 10:47:47 +0200
Date: 2016-06-18T10:47:47+02:00 [thread overview]
Message-ID: <nk31ru$10pb$1@gioia.aioe.org> (raw)
In-Reply-To: d9d7f8f5-8b72-450b-8152-4b6116c6ce2c@googlegroups.com
On 2016-06-18 10:16, Hadrien Grasland wrote:
> In addition to the benefits you mention, I will also add that a
> language-level implementation can potentially trap blocking system calls
> and substitute them with task switches for latency hiding. It will also
> get wide support from the standard library instead of requiring many
> custom primitives an wrapper, which means more development time to focus
> on the core concurrency model.
It looks like too much burden on the implementation if possible at all.
But certainly, yes, entry calls must be aware of the context when made
from a co-routine.
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;
> However, I think that as it stands, we are just about as likely to
> see it happening in Ada as we are to get lambdas and first-class function
> objects.
Yes, it is difficult to convince. But co-routines do not look like much
a change since all syntax necessary is basically there. It is semantics
of entry calls and accept statements which must be attuned.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2016-06-18 8:47 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 [this message]
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
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