Efficient thread-local shared variables

ncellier at ifrance.com ncellier at ifrance.com
Tue Oct 24 07:39:31 UTC 2006

Hi Klaus and Andreas
I find the local shared variable feature most useful.
I'am trying to understand your suggestions, sorry for being slow-brained...

- have a SharedPool per process, compiler does replace symbolic name with integer indices
 pseudo-code for PerProcessThing:
 Processor activeProcess sharedPool at: PerProcessThingCompiledIndex
- have to recompile code when an entry removed from sharedPool
 (efficiency rely on this event being rare like for instance variables)

- have a single SharedPool with values being an array, and an index per process?
  pseudo code for PerProcessThing:
  PerProcessThing localSharedValue
  where localSharedValue is (^self at: Processor activeProcess processIndex)
- have to reset all the shared value arrays each time a process is created or die...

I am not sure i understood well Klaus proposition
Did i get it ?


Le Mardi 24 Octobre 2006 07:33, Klaus D. Witzel a écrit :
> Hi Andreas,
> on Tue, 24 Oct 2006 06:46:26 +0200, you wrote:
> > Folks -
> >
> > For a variety of reasons I am in dire need of the ability to vector
> > shared variables (globals, class vars and pool vars) through an extra
> > indirection vector per process (really per island but binding per
> > process seems to be simpler for now). Since I need this for *each and
> > every shared variable* it needs to be *very* efficient.
> >
> > The question is: What is the most efficient way to implement such a
> > scheme?
> The fastest indirect access is through literal variables (limited only by
> the # of literals allowed per method).
> Since you are willing to spend a #symbol per variable, formally declare a
> "descriptor" to be a class var (or use a pool). Take #PerProcessThing as
> as example; initialize PerProcessThing to a subinstance of Association
> which holds a fast and fixed Array index.
> Then all you need in the scope of activeProcess is a shared Array which is
> indexed by the above machinery. Example use:
> 	PerProcessThing localSharedValue
> 	PerProcessThing localSharedValue: somethingElse
> Not counting "Processor activeProcess scope", the above is the fastest
> double-indirect access that I can think of.
> /Klaus

iFRANCE, exprimez-vous !

More information about the Squeak-dev mailing list