Difference between revisions of "Architecture/Proposal/Advanced Threading-Architecture"
From Apache OpenOffice Wiki
m (Fixed section indentation, some wording.) |
|||
| Line 1: | Line 1: | ||
| + | Type: Proposal | ||
State: draft | State: draft | ||
| − | |||
| − | |||
The advanced threading architecture aims to solve OOs multi threading and concurrency problems. | The advanced threading architecture aims to solve OOs multi threading and concurrency problems. | ||
| − | + | ==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 somes minutes, without repaint and everything (it can take more time, if you have more than one http:// reference in your document) ;-), | ||
| Line 12: | Line 11: | ||
* 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 interruptable. | ||
| − | + | ==Solution== | |
OOo must be changed to be purely event / callback driven. Please see [[Wikipedia:|Wikipedia]] for what [[wikipedia:event-driven programming|event-driven programming]] is. | OOo must be changed to be purely event / callback driven. Please see [[Wikipedia:|Wikipedia]] for what [[wikipedia:event-driven programming|event-driven programming]] is. | ||
| Line 24: | Line 23: | ||
** concurrency per document. | ** concurrency per document. | ||
| − | + | ===Pros=== | |
* 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. | ||
| Line 32: | Line 31: | ||
* One single location where to create threads. | * One single location where to create threads. | ||
| − | + | ===Cons=== | |
* (assumed to be) Hard to implement. | * (assumed to be) Hard to implement. | ||
Pseudo Code for event loop: | Pseudo Code for event loop: | ||
| − | < | + | <code>[[cpp] |
void dispatch(int signal) { | void dispatch(int signal) { | ||
switch(signal) { | switch(signal) { | ||
| Line 60: | Line 59: | ||
return 0; | return 0; | ||
} | } | ||
| − | </ | + | </code> |
Graphical overview:<br> | Graphical overview:<br> | ||
[[Image:Spec_Architecture_Threading_Advanced.jpg]] | [[Image:Spec_Architecture_Threading_Advanced.jpg]] | ||
| − | [[Category:Spec | + | |
| + | [[Category:Spec]] | ||
Revision as of 08:06, 5 September 2006
Type: Proposal State: draft
The advanced threading architecture aims to solve OOs multi threading and concurrency 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 somes 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),
- scalability with multiple threads, in particular when doing API programming,
- most long lasting operations (e.g. loading, saving, printing etc.) are not interruptable.
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),
- asynchronous signals 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, multi cores and SMP.
- Controlable CPU utilization and possible avoidance of over utilization.
- 'Simple' architecture.
- One single location where to create threads.
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;
}
