Efficient thread-local shared variables
Klaus D. Witzel
klaus.witzel at cobss.com
Tue Oct 24 05:33:00 UTC 2006
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
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: somethingElse
Not counting "Processor activeProcess scope", the above is the fastest
double-indirect access that I can think of.
More information about the Squeak-dev