You need to carefully evaluate the issues this causes, specifically
the issue of something being started multiple times in parallel
because it's so slow.
Update()
{
DoOneSlowThing();
DoASlowSynchrnousThing();
}
converted to
Update())
{
Util.FireAndForget(DoOneSlowThing, null);
DoASlowSynchrnousThing();
}
may cause DoOneSlowThing to be run multiple times, concurrently. For
most Update() parts, that is ano-no.
Melanie
Justin Clark-Casey wrote:
> Whilst bug hunting today, I had reason to dive into the Scene.Update() loop.
> This is called many times per second and
> is in charge of updating the entire scene (moving avatars in response to
> client input, sending queued object updates to
> the client stack, etc.). The time taken by this loop increases as the number
> objects and avatars in the scene increase.
>
> There's quite a lot of code hanging off this loop that looks like it could be
> carried out asynchronously instead. This
> particularly applies to some of the stuff being invoked via EventManager
> rather than called directly.
>
> If the amount of synchronous code here could be reduced then this could
> improve scene performance and reduce instances
> where delays in the called code temporarily freeze the update loop. These
> problems can be very hard to track down.
>
> Unless there are any countervailing technical arguments, I'd like to start
> slowly looking at this over the long term.
> This might go so far as making some loop-triggered EventManager events
> asynchronous rather than synchronous. I know
> there is a fair amount of code that does depend on synchronous execution so
> any changes will be done slowly and carefully.
>
> Regards,
>
_______________________________________________
Opensim-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/opensim-dev