Difference between revisions of "Architecture/Proposal/Advanced Threading-Architecture"

From Apache OpenOffice Wiki
Jump to: navigation, search
m (Improved wording, fixed some typos.)
Line 2: Line 2:
 
State: draft
 
State: draft
  
The advanced [[Uno/Term/Threading-Architecture|threading-architecture]] aims to solve OOs multi-threading and concurrency problems.
+
The advanced [[Uno/Term/Threading-Architecture|threading-architecture]] aims to solve OOos scalability and responsiveness problems.
  
 
==Problem==
 
==Problem==
 
The following list gives a brief overview, of where the problems lie,
 
The following list gives a brief overview, of where the problems lie,
* unresponsive user interface (e.g. trying to connect to a particular web server may take somes minutes, without repaint and everything (it can take more time, if you have more than one http:// reference in your document) ;-),
+
* unresponsive user interface (e.g. trying to connect to a particular web server may take some minutes, without repaint and everything (it can take more time, if you have more than one http:// reference in your document) ;-),
* busy waiting (e.g. frequent re-schedule or yield calls),
+
* polling / busy waiting (e.g. frequent re-schedule or yield calls),
* scalability with multiple threads, in particular when doing API programming,
+
* scalability with multiple clients, in particular when doing API programming,
* most long lasting operations (e.g. loading, saving, printing etc.) are not interruptable.
+
* most long lasting operations (e.g. loading, saving, printing etc.) are not interruptible.
  
 
==Solution==
 
==Solution==
Line 15: Line 15:
  
 
The following list gives a first idea, of what should be done,
 
The following list gives a first idea, of what should be done,
* all (potentially) blocking calls need to be event driven,
+
* all (potentially) blocking calls need to be event-driven,
 
* all long lasting calls need to be executed by dedicated threads, notifying the consumers via events / callbacks, in case data is available (thus basically creating event sources and event sinks),
 
* all long lasting calls need to be executed by dedicated threads, notifying the consumers via events / callbacks, in case data is available (thus basically creating event sources and event sinks),
* asynchronous signals need to be mapped to events,
+
* UNIX asynchronous signals, being an process interface by their own, need to be mapped to events,
 
* Windows window messages need to be mapped to events,
 
* Windows window messages need to be mapped to events,
 
* the [[Uno/Term/Threading-Architecture|threading-architecture]] must be defined high level, e.g.
 
* the [[Uno/Term/Threading-Architecture|threading-architecture]] must be defined high level, e.g.
Line 26: Line 26:
 
* Not calling potential blocking system calls leads to 'short' lasting mutex acquisitions.
 
* Not calling potential blocking system calls leads to 'short' lasting mutex acquisitions.
 
* No hand crafted reschedules necessary anymore.
 
* No hand crafted reschedules necessary anymore.
* Easy utilization of Hyper Threading, multi cores and SMP.  
+
* Easy utilization of hyper threading, multiple cores and SMP.  
* Controlable CPU utilization and possible avoidance of over utilization.
+
* Controllable CPU utilization and possible avoidance of over utilization.
 
* 'Simple' architecture.
 
* 'Simple' architecture.
* One single location where to create threads.
+
* Potentially high level thread abstraction.
  
 
===Cons===
 
===Cons===

Revision as of 08:16, 6 September 2006

Type: Proposal State: draft

The advanced threading-architecture aims to solve OOos scalability and responsiveness problems.

Problem

The following list gives a brief overview, of where the problems lie,

  • unresponsive user interface (e.g. trying to connect to a particular web server may take some minutes, without repaint and everything (it can take more time, if you have more than one http:// reference in your document) ;-),
  • polling / busy waiting (e.g. frequent re-schedule or yield calls),
  • scalability with multiple clients, in particular when doing API programming,
  • most long lasting operations (e.g. loading, saving, printing etc.) are not interruptible.

Solution

OOo must be changed to be purely event / callback driven. Please see Wikipedia for what event-driven programming is.

The following list gives a first idea, of what should be done,

  • all (potentially) blocking calls need to be event-driven,
  • all long lasting calls need to be executed by dedicated threads, notifying the consumers via events / callbacks, in case data is available (thus basically creating event sources and event sinks),
  • UNIX asynchronous signals, being an process interface by their own, need to be mapped to events,
  • Windows window messages need to be mapped to events,
  • the threading-architecture must be defined high level, e.g.
    • concurrency per application, or
    • concurrency per document.

Pros

  • Not calling potential blocking system calls leads to 'short' lasting mutex acquisitions.
  • No hand crafted reschedules necessary anymore.
  • Easy utilization of hyper threading, multiple cores and SMP.
  • Controllable CPU utilization and possible avoidance of over utilization.
  • 'Simple' architecture.
  • Potentially high level thread abstraction.

Cons

  • (assumed to be) Hard to implement.

Pseudo Code for event loop: [[cpp] void dispatch(int signal) {

 switch(signal) {
 case SIGIO:
   fileHandler(getHandle());
   break;
 case SIGTERM:
   ...
 }

}

int quit; sigset_t sigset;

int main(void) {

 int signal;
 while(!quit) {
   sigwait(&sigset, &signal);
   dispatch(signal);
 }
 return 0;

}

Graphical overview:
Spec Architecture Threading Advanced.jpg

Personal tools