Fwd (andre at merzky.net): Re: Fwd (andre at merzky.net): Re: [saga-rg] context problem
Andre Merzky
andre at merzky.net
Sun Jul 16 11:45:30 CDT 2006
I should have added that I'd prefer 3:
> > 3. when creating a task, all parameter objects are passed "by reference"
> > + no enforced copying overhead
> > - all objects are shared, lots of potential error conditions
The error conditions I could think of are:
- change state of object while a task is running, hence
having the task doing something differently than
intended
- limited control over resource deallocation
The advantages I see:
- no copy overhead (but, as you say, that is of no concern
really)
- simple, clear defined semantics
- tasks keep objects they operate on alive
- objects keep sessions they live in alive
- sessions keep contexts they use alive
- sync and asyn operations operate on the same object
instance.
Either way (1, 2 or 3), we have to have the user of the API
thinking while using it - neither is not idiot proof.
I think (2) is most problematic, if I understant your
'hand-over' correctly: that would mean you can't use the
object again until the task was finished?
Cheers, Andre.
Quoting [Andre Merzky] (Jul 16 2006):
>
> Hi Thilo,
>
> very good points, and indeed (1) seems cleanest. However,
> it has its own semantic pitfalls:
>
> saga::file f (url);
> saga::task t = f.write <saga::task::Task> ("hello world", ...);
>
> f.seek (100, saga::file::SeekSet);
>
> t.run ();
> t.wait ();
>
>
> If on task creation the file object gets copied over, the
> subsequent seek (sync) and write (async) work on different
> object copies. In particular, these copies will have
> different state - seek on one copy will have no effect on
> where the write will occur. That is the reason why we have
> the delayed object destruction in the first place: that
> tasks can share state.
>
> Cheers, Andre.
>
>
>
> Quoting [Thilo Kielmann] (Jul 16 2006):
> > Date: Sun, 16 Jul 2006 18:20:50 +0200
> > From: Thilo Kielmann <kielmann at cs.vu.nl>
> > To: saga-rg at ggf.org
> > Subject: Re: Fwd (andre at merzky.net): Re: Fwd (andre at merzky.net): Re: [saga-rg] context problem
> >
> > OK, let's assume that creation/deletion of SAGA objects is independent of
> > memory management.
> >
> > > > saga_task* t;
> > > >
> > > > saga_session s = saga_session_create ();
> > > > saga_file f = saga_file_create (s, url);
> > > >
> > > > saga_task t = saga_file_copy_task (target);
> > > >
> > > > saga_session_destroy (s);
> > > > saga_file_destroy (f);
> > > >
> > > > saga_task_run (t);
> >
> > What should be the meaning of destroying s and f, while they are still in use?
> > (if it is NOT memory management)
> >
> > Assuming that we still strive for simplicity, I can not really see why it
> > should be easier to destroy objects, esp. if this does not free memory.
> >
> > Do I understand you right that you propose an "advice", with the semantics:
> > saga_*_destroy may or may not destroy the object actually, depending on
> > whether or not it (who???) still uses the object internally?
> > That sounds like semantics that nobody will understand...
> > (And that means what?? A destroy that is not about memory management and that
> > destroys MAYBE???)
> >
> > Isn't it that the special thing is that a task (or async op) is running
> > asynchronously from the piece of code that has created the task?
> >
> > I see three different (and more-or-lee clean) ways of describing (in the
> > language-independent spec) what shall happen to parameters (like s and f)
> > that are shared between these two threads/activities/tasks:
> >
> > 1. when creating a task, all parameter objects are copied to the new task.
> > + the originating task is free to do with its own objects whatever it likes
> > + the newly created task is a self-contained entity w.r.t. its objects
> > - enforced copying means enforced runtime overhead
> > 2. when creating a task, all parameter objects are "handed over" to the new
> > task
> > + no enforced copying overhead
> > + the newly created task is a self-contained entity w.r.t. its objects,
> > as long as the programmer obeys the hand-over and does not modify or
> > destroy the objects in the creating task/thread/activity
> > - the "if" bears the potential for a lot of tricky error conditions,
> > because objects are shared de-facto
> > 3. when creating a task, all parameter objects are passed "by reference"
> > + no enforced copying overhead
> > - all objects are shared, lots of potential error conditions
> >
> >
> > I think the cleanest version would be 1.
> > (As SAGA always assumed that its own overhead does not matter compared to
> > service invocations.)
> >
> >
> > Thilo
> >
> > PS: Is there a third person on the list who dares sharing his/her opinion???
--
"So much time, so little to do..." -- Garfield
More information about the saga-rg
mailing list