From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: GNAT and Tasklets
Date: Wed, 17 Dec 2014 16:08:20 -0600
Date: 2014-12-17T16:08:20-06:00 [thread overview]
Message-ID: <m6susq$5pq$1@loke.gir.dk> (raw)
In-Reply-To: cfe7hnFaj8oU1@mid.individual.net
"Niklas Holsti" <niklas.holsti@tidorum.invalid> wrote in message
news:cfe7hnFaj8oU1@mid.individual.net...
> On 14-12-17 15:06 , vincent.diemunsch@gmail.com wrote:
...
>> and since User Level threads are lightweight
>> compared to Kernel threads,
>
> My impression is that this is no longer the case, but perhaps things have
> changed again in recent years.
>
>> But with multiple cores, we need all tasks running on a pool of
>> kernel threads, one thread per core.
>
> In what way would that be better than having one kernel thread per task?
> In either case, each task would have to have its own stack area, and I
> don't see why task switching would be radically faster, either (assuming
> that these kernel threads share the same virtual memory space).
I don't agree. We did experiments on this back in the early days of Windows
XP, and the Janus/Ada implementation (cooperative tasks) was several times
faster than the threaded implementations of other compilers tested. As such,
we didn't pursue a threaded implementation at that time. (Obviously, we
didn't anticipate multicore machines at that time.)
While I'm sure that OS threads have less overhead now, they'll always be
behind since they have to save a lot more stuff during a task switch. Since
a task switch mainly happens when a task routine is called (a task
dispatching point in Ada parlence), and we can make sure that little needs
to be saved in that case (nothing is in registers, for instance), task
switches could be very fast. (They're not anywhere near as fast as they
could be for historical reasons.)
(It's the same reason that preemption would be much slower in our
implementation than normal task switching. That doesn't matter since we
don't support any priorities; priorities don't really work on multicore
anyway since tasks generally don't migrate so it is best that programmers
live without them.)
I've considered looking into building a task supervisor based on
work-stealing, which would only use a small number of OS threads (probably
one per core). That would would make better use of the unique aspects of Ada
tasks, but I worry that it wouldn't be compatible with C++ and the like
(sadly, a business requirement these days).
> As I remember, the user-level thread solution in GNAT had the drawback
> that if one thread blocked on an OS call, the whole program was blocked.
True, but that's not a real problem in most software (that has to respond in
human timescales - if you need microsecond response times, forget
Janus/Ada!). It requires a bit of care to avoid waiting on anything that
could block for a long time (typically reads of some sort), but most OS
operations happen fast enough that you can't notice them.
After all, Claw programs work (including those with multiple tasks
displaying in a window) essentially the same when compiled with Janus/Ada,
or with GNAT, or with the old Rational compiler. The tasking model doesn't
matter to Claw. Similarly, our web server and mail filter both work fine
with the Janus/Ada implementation and I'll soon be porting them to Gnat on
Linux - I expect them to work fine there, too.
Randy.
next prev parent reply other threads:[~2014-12-17 22:08 UTC|newest]
Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-10 16:31 GNAT and Tasklets vincent.diemunsch
2014-12-11 10:02 ` Jacob Sparre Andersen
2014-12-11 16:30 ` Anh Vo
2014-12-11 18:15 ` David Botton
2014-12-11 21:45 ` Egil H H
2014-12-11 23:09 ` Randy Brukardt
2014-12-12 2:28 ` Jacob Sparre Andersen
2014-12-12 8:46 ` vincent.diemunsch
2014-12-12 23:33 ` Georg Bauhaus
2014-12-13 2:06 ` Brad Moore
2014-12-13 6:50 ` Dirk Craeynest
2014-12-14 0:18 ` Hubert
2014-12-14 21:29 ` vincent.diemunsch
2014-12-16 5:09 ` Brad Moore
2014-12-17 13:24 ` vincent.diemunsch
2014-12-16 4:42 ` Brad Moore
2014-12-17 13:06 ` vincent.diemunsch
2014-12-17 20:31 ` Niklas Holsti
2014-12-17 22:08 ` Randy Brukardt [this message]
2014-12-17 22:52 ` Björn Lundin
2014-12-17 23:58 ` Randy Brukardt
2014-12-18 10:39 ` Björn Lundin
2014-12-18 23:01 ` Randy Brukardt
2014-12-19 8:39 ` Natasha Kerensikova
2014-12-19 23:39 ` Randy Brukardt
2014-12-19 8:59 ` Dmitry A. Kazakov
2014-12-19 11:56 ` Björn Lundin
2014-12-20 0:02 ` Randy Brukardt
2014-12-18 8:42 ` Dmitry A. Kazakov
2014-12-18 8:56 ` vincent.diemunsch
2014-12-18 9:36 ` Dmitry A. Kazakov
2014-12-18 10:32 ` vincent.diemunsch
2014-12-18 11:19 ` Dmitry A. Kazakov
2014-12-18 12:09 ` vincent.diemunsch
2014-12-18 13:07 ` Dmitry A. Kazakov
2014-12-19 10:40 ` Georg Bauhaus
2014-12-19 11:01 ` Dmitry A. Kazakov
2014-12-19 16:42 ` Brad Moore
2014-12-19 17:28 ` Dmitry A. Kazakov
2014-12-19 18:35 ` Brad Moore
2014-12-19 20:37 ` Dmitry A. Kazakov
2014-12-20 1:05 ` Randy Brukardt
2014-12-20 17:36 ` Brad Moore
2014-12-21 18:23 ` Brad Moore
2014-12-21 19:21 ` Shark8
2014-12-21 19:45 ` Brad Moore
2014-12-21 23:21 ` Shark8
2014-12-22 16:53 ` Brad Moore
2014-12-21 21:35 ` tmoran
2014-12-21 22:50 ` Brad Moore
2014-12-21 23:34 ` Shark8
2014-12-22 16:55 ` Brad Moore
2014-12-22 23:06 ` Randy Brukardt
2014-12-20 16:49 ` Dennis Lee Bieber
2014-12-20 17:58 ` Brad Moore
2014-12-19 19:43 ` Peter Chapin
2014-12-19 20:45 ` Georg Bauhaus
2014-12-19 20:56 ` Dmitry A. Kazakov
2014-12-19 23:55 ` Randy Brukardt
2014-12-19 23:51 ` Randy Brukardt
2014-12-18 22:33 ` Randy Brukardt
2014-12-19 13:01 ` GNAT�and Tasklets vincent.diemunsch
2014-12-19 17:46 ` GNAT?and Tasklets Brad Moore
2014-12-20 0:39 ` GNAT and Tasklets Peter Chapin
2014-12-20 9:03 ` Dmitry A. Kazakov
2014-12-20 0:58 ` GNAT�and Tasklets Randy Brukardt
2014-12-18 9:34 ` GNAT and Tasklets Niklas Holsti
2014-12-18 9:50 ` Dmitry A. Kazakov
2014-12-17 21:08 ` Brad Moore
2014-12-18 8:47 ` vincent.diemunsch
2014-12-18 21:58 ` Randy Brukardt
2014-12-17 22:18 ` Randy Brukardt
2014-12-18 0:56 ` Shark8
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox