Uno/Effort/Binary/Extend Threading-Model

From Apache OpenOffice Wiki
< Uno
Jump to: navigation, search

Type: effort Status: Finished Owner: Kay Ramme Availability: URE 1.3 (SRC680_m212)

The mission of this effort is, to extend the Uno threading-model, to provide a way to design an applications threading-architecture independent of the implementations. This can be described as transparent-concurrency wrt the implementations.

Problem

Not everything should be required to be implemented thread-safe. E.g. see comments from John Ousterhout regarding multi-threading. Encapsulation of thread-affinity should be easy.

Solution

The extended Uno threading-model is basically going to introduce the notion of an apartment into the Uno world. An apartment in Uno terms is a purpose environment. Such an environment can be seen as a dedicated part of a process, giving space for objects of the same Object Binary Interface (OBI) and the same purpose. An environment can only be entered and left via defined doors, being proxy objects representing objects outside respectively inside the environment.

UNO Envs.jpg

All calls from one Uno Environment to another are intercepted, references to local objects are replaced with proxies to these local objects, this operation is called "mapping" in Uno terms. Actually, an object gets "mapped" from one Uno Environment to another. Proxies already representing to be mapped objects of another Uno Environment become reused during the "mapping" operation, ensuring that an object can only be "mapped" once.

Purpose environments may be dedicated to MutExes or threads. In the sense, that a MutEx becomes acquired or a thread gets switched to before a call enters an environment.

Time Frame

Understanding of the topic let us think, that the first changes of OOo / Uno on behalf of the extended threading-model were going to be integrated into one of the updates in 2006. The plan was, to implement the whole stack into the utf2 CWS, which had been done, to ensure that everything worked as expected. The implementation has finally be done in the bunoexttm CWS and is currently in QA. Expectation is, that the extended Binary Uno threading model is going to be available with OOo 2.3.

Tasks

Area Title State CWS
Binary Uno Specify Threading-Model 100% bunoexttm
Binary Uno Specify Environment Stack 100% bunoexttm
Binary Uno Implement Environment Stack 100% bunoexttm
Binary Uno Implement Test for Environment Stack 100% bunoexttm
Binary Uno Specify Cascaded Mapping 100% bunoexttm
Binary Uno Implement Cascaded Mapping 100% bunoexttm
Binary Uno Implement Test for Cascaded Mapping 100% bunoexttm
Binary Uno Specify Environment Descriptor 100% bunoexttm
Binary Uno Implement Environment Descriptor 100% bunoexttm
Binary Uno Implement Test for Environment Descriptor 100% bunoexttm
Binary Uno Specify Environment Substitution 100% bunoexttm
Binary Uno Implement Environment Substitution 100% bunoexttm
Binary Uno Implement Test for Environment Substitution 100% bunoexttm
Binary Uno Specify Thread Unsafety Bridge 100% bunoexttm
Binary Uno Implement Thread Unsafety Bridge 100% bunoexttm
Binary Uno Implement Test for Thread Unsafety Bridge 100% bunoexttm
Binary Uno Specify Thread Affinity Bridge 100% bunoexttm
Binary Uno Implement Thread Affinity Bridge 100% bunoexttm
Binary Uno Implement Test for Thread Affinity Bridge 100% bunoexttm
Binary Uno Adapt Component Loader to support Purpose Environments 100% bunoexttm
Binary Uno Test for Component Loaders support of Purpose Environments 100% bunoexttm
Binary Uno Add support for extend getImplEnv function 100% bunoexttm
Binary Uno Adapt currentContext retrieval to support Purpose Environments 100% bunoexttm
C++ Uno Adapt bootstrapping components 100% bunoexttm
C++ Uno Test for bootstrapping 100% bunoexttm
C++ Uno Add Purpose Environment to C++ bridges 100% bunoexttm
C++ Uno Specify Threading-Model 100% bunoexttm
C++ Uno Specify Environment Stack 100% bunoexttm
C++ Uno Implement Environment Stack 100% bunoexttm
C++ Uno Implement Test for Environment Stack 100% bunoexttm
C++ Uno Specify Map Helpers 100% bunoexttm
C++ Uno Implement Map Helpers 100% bunoexttm
C++ Uno Implement Test for Map Helpers 100% bunoexttm
C++ Uno Specify Shield Helpers 100% bunoexttm
C++ Uno Implement Shield Helpers 100% bunoexttm
C++ Uno Implement Test for Shield Helpers 100% bunoexttm
C++ Uno Specify FreeReference 100% bunoexttm
C++ Uno Implement FreeReference 100% bunoexttm
C++ Uno Implement Test for FreeReference 100% bunoexttm
C++ Uno Specify Environment Guard 100% bunoexttm
C++ Uno Implement Environment Guard 100% bunoexttm
C++ Uno Implement Test for Environment Guard 100% bunoexttm
C++ Uno Specify Environment Descriptor 100% bunoexttm
C++ Uno Implement Environment Descriptor 100% bunoexttm
C++ Uno Implement Test for Environment Descriptor 100% bunoexttm
C++ Uno Specify Environment AntiGuard 100% bunoexttm
C++ Uno Implement Environment AntiGuard 100% bunoexttm
C++ Uno Implement Test for Environment AntiGuard 100% bunoexttm
C++ Uno Specify Purpose Bridge Implementation Helper 100% bunoexttm
C++ Uno Implement Purpose Bridge Implementation Helper 100% bunoexttm
C++ Uno Test for Purpose Bridge Implementation Helper 100% bunoexttm

Dependencies

Area Title State CWS
C++ Uno

Misc Improvements

100% krmisc (SRC680_m191)
Binary Uno

Preparation

  • enable identity mapping: getting a Uno Mapping from and to the same environment - currently the runtime does return NULL, so every client has to check for it,
  • cleanup the dll component loader
    • to use the identity mapping, and
    • to get rid of very outdated deprecated stuff
100% bunoidmap (SRC680_m196)
Binary Uno Implement Environment Tester 100% bunoexttm
Binary Uno Implement Mapping Tester 100% bunoexttm
Personal tools