From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Broadcast / iterate to all Connection objects via Simple Components?
Date: Mon, 13 Feb 2023 12:57:19 +0100 [thread overview]
Message-ID: <tsd8iu$23ce9$3@dont-email.me> (raw)
In-Reply-To: <a858964c-8087-44ed-83da-c018759c492fn@googlegroups.com>
On 2023-02-13 12:07, Emmanuel Briot wrote:
> On Monday, February 13, 2023 at 11:55:10 AM UTC+1, Dmitry A. Kazakov wrote:
>> Well, if there is Linux kernel level support why it is not used in
>> socket select as it is in epoll? I would expect them do that at some
>> point or drop epoll... (:-))
>
> Because in practice the linux developers don't get to modify such APIs, which
> are mandated by Posix, or Unix, or some RFC.
> So the API for select and poll will *never* change.
Well, the API does not really prescribe the actual implementation of
fd_set. If you need that many elements in the set then using a bitmask
and not having some bookkeeping to balance load will bit you at some
point anyway.
> epoll is definitely the modern approach on linux, until of course someone finds
> something even better. epoll is fully thread safe too, which is very nice when
> used from Ada.
> Using select() is totally outdated at this point, and means you can never handle
> more than 1000 simultaneous clients, and that only if you do not have other
> file descriptors open (database, files,...)
Well, it is indicative how outdated Linux always was. Asynchronous I/O
was old news long *before* Linus even started his project... (:-))
> The person who developed GNAT.Sockets has left AdaCore a while ago, so "they" (which
> I assume is what your message was referring to) are actually unlikely to update that.
Yes, that is what I expect, a face lifting of Linux implementation of
GNAT.Sockets.
> They also have strong concerns about platform-agnostic support, and epoll is linux-specific
> at this point (likely also BSD).
GNAT.Sockets is no thin bindings, I see little problem here. AFAIK BSD
allows increasing FD_SETSIZE, but I am not sure.
> There exists multiple libraries out there that provide an API
> common to multiple platforms, and that use epoll on linux. Maybe that's what would make
> sense, but nowadays with Alire, I would expect someone to build a crate there rather than
> AdaCore modify GNAT.Sockets.
That is an option too. However presently I cannot use Alire because last
time I looked it did not support automated uploading, versioning and
target dependencies through the GPR.
>> I'd like to have special Ada "tasks" acting as co-routines on top of
>> proper tasks yielding when the socket buffer is empty or full.
>
> This is an approach we had discussed at AdaCore before I left. There are multiple drawbacks
> here: the limited stack size for tasks by default (2MB), the fact that entries cannot return indefinite
> types, the fact that currently those tasks are assigned to OS threads (so too many of them does
> impact resource usage),...
My idea is to have these as pseudo-tasks scheduled by the Ada run-time
and not mapped onto any OS threads. A proper thread would pick up such a
task and run it until it yields. The crucial point is to use the stack
of the pseudo-task in place of the thread's stack or backing it up and
cleaning the portion of the stack at the point of yielding, whatever.
> A colleague had found an external library that would provide several stacks and thus let people
> implement actual co-routines. We did not do much more work on that, but it was a nice proof
> of concept, and efficient. I think things are mostly blocked now, as the ARG has been discussing
> these topics for quite a few years now.
I have an impression that ARG's view on co-routines totally ignores the
use case of communication stacks and other cases state machines show
their ugly faces...
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2023-02-13 11:57 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-07 20:29 Broadcast / iterate to all Connection objects via Simple Components? A.J.
2023-02-08 8:55 ` Dmitry A. Kazakov
2023-02-08 9:55 ` Jeffrey R.Carter
2023-02-13 7:28 ` Emmanuel Briot
2023-02-13 8:30 ` Dmitry A. Kazakov
2023-02-13 8:44 ` Emmanuel Briot
2023-02-13 10:55 ` Dmitry A. Kazakov
2023-02-13 11:07 ` Emmanuel Briot
2023-02-13 11:57 ` Dmitry A. Kazakov [this message]
2023-02-13 13:22 ` Niklas Holsti
2023-02-13 15:10 ` Dmitry A. Kazakov
2023-02-13 16:26 ` Niklas Holsti
2023-02-13 19:48 ` Dmitry A. Kazakov
2023-02-15 9:54 ` Niklas Holsti
2023-02-15 10:57 ` Dmitry A. Kazakov
2023-02-15 18:37 ` Niklas Holsti
2023-02-19 1:27 ` A.J.
2023-02-19 8:29 ` Dmitry A. Kazakov
2023-02-19 14:37 ` Niklas Holsti
2023-02-13 15:43 ` J-P. Rosen
2023-02-13 16:40 ` Jeremy Grosser <jeremy@synack.me>
2023-02-13 20:33 ` Daniel Norte de Moraes
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox