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: Sun, 3 Jul 2016 14:15:11 -0700 (PDT)
Date: 2016-07-03T14:15:11-07:00	[thread overview]
Message-ID: <d379100e-03cc-4848-9d7a-bf66d59ad6e3@googlegroups.com> (raw)
In-Reply-To: <nlaj0h$1pj4$1@gioia.aioe.org>

Le dimanche 3 juillet 2016 10:39:48 UTC+2, Dmitry A. Kazakov a écrit :
> On 2016-07-03 09:42, Hadrien Grasland wrote:
> > Le samedi 2 juillet 2016 23:14:30 UTC+2, Niklas Holsti a écrit :
> 
> >> Moreover, in present Ada it seems to me that the only way to move
> >> task-private data from one task to another is to send a copy of the data
> >> from one task to the other. Copying data is often poison for performance.
> >
> > Cheaply moving data around is possible in any language that has heap
> > allocation and pointers.
> 
> That is the most expensive way doing it, and on top of that, it requires 
> shared memory (pool) and thus process-global interlocking. You arrived 
> at the starting point.

Please define what you mean by expensive. Whenever the hardware architecture allows for it, passing a pointer to a heap-allocated data block is almost always faster than deep-copying that data from one thread-private area of memory to another, as long as the data is large enough.

 
> BTW, when talking about asynchronous model, marshaling must be 
> asynchronous too. Another drawback of the method of doing that through 
> pointers is that it must be atomic = synchronous => you could not deal 
> with large objects, on-demand production models etc. And this is where 
> event-controlled model stop working, as it separates data from 
> data-related events. A proper abstraction must combine everything into 
> ADT objects.

Indeed, I also agree that when an event is used to notify a listener that some piece of data has been produced, it is almost always better to combine together the event and the data block being produced in a single abstraction, a future.

However, futures are less general than events. In runtimes that only have futures, like HPX, you cannot easily express the completion of procedural operations. You just end up with horrible hacks such as hpx::future<void> ("a future of nothing"). This is why I believe that events are best as a low-level layer, on top of which higher-level abstractions such as futures can be built.


> > What is more difficult is to provide an easy to
> > use syntax around it.
> 
> Hmm, what is difficult about procedure call?

Basically, it is best if producers and consumers do not actually manipulate raw pointers to the heap-allocated blocks.

Otherwise, there is always a risk of a producer retaining access to the produced block and later manipulating it in a racey fashion.

A better option is to have a system where at the point where a producer "emits" data, it loses access to the associated data block. Of course, this is impossible to achieve in a perfectly fool-proof way, but we can make it harder for developers to shoot themselves in the foot, using things like futures.


  reply	other threads:[~2016-07-03 21:15 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
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 [this message]
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