diff options
author | Mike Buland <eichlan@xagasoft.com> | 2016-09-21 12:04:25 -0600 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2016-09-21 12:04:25 -0600 |
commit | 31fa2d4836ce93993aa94364b1c3dd2195c90142 (patch) | |
tree | 3f3e589d599b747e79e62ed27873b27751b3a8cc | |
parent | 464c9493f30847096c874ee9618ba420239c915a (diff) | |
download | build-31fa2d4836ce93993aa94364b1c3dd2195c90142.tar.gz build-31fa2d4836ce93993aa94364b1c3dd2195c90142.tar.bz2 build-31fa2d4836ce93993aa94364b1c3dd2195c90142.tar.xz build-31fa2d4836ce93993aa94364b1c3dd2195c90142.zip |
Saved the threading plan from the branch.
This was the only useful thing in the threading breanch.
-rw-r--r-- | docs/threading-plan.txt | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/docs/threading-plan.txt b/docs/threading-plan.txt new file mode 100644 index 0000000..794d60f --- /dev/null +++ b/docs/threading-plan.txt | |||
@@ -0,0 +1,28 @@ | |||
1 | It looks like the following changes will have to happen in order to allow build | ||
2 | to bu truly multi-threaded. We can't proceed like I originally thought, the | ||
3 | entire system is build-script driven, including the profiles that do the actual | ||
4 | building. | ||
5 | |||
6 | 1. Context needs to be broken apart into everything it currently has except | ||
7 | the ScopeStack, and the ScopeStack. The initial ScopeStack (the root level) | ||
8 | will be built before the program goes multi-thraeded, then it will be copied | ||
9 | into each thread so they all start with the same global state. | ||
10 | Targets will still be built the same way, so we won't have to worry about | ||
11 | targets' global variable overrides. | ||
12 | 2. Instead of each target actually processing it's complete list of dependancies | ||
13 | when it's processed, it should create a queue of them. This may well be the | ||
14 | biggest change, but it still should be fairly doable. We'll still process | ||
15 | them in the same order, which will make things pretty easy. | ||
16 | That queue will be global, and will be what feeds the thread dispatcher. | ||
17 | 3. A new thread handler and thread class needs to be created. The threads will | ||
18 | dequeue targets from the target queue and process them provided all | ||
19 | prerequisites have been completed. We can do this a few ways, but I think | ||
20 | a simple loop will suffice. | ||
21 | Loop steps: | ||
22 | 1. Check all deps on target, if completed, then execute, otherwise: | ||
23 | 2. Wait on condition that is triggered every time a target is completed. | ||
24 | 3. Go back to 1 | ||
25 | 4. View needs to be made completely thread-safe, I'm thinking maybe through a | ||
26 | View system middle layer handler in order to keep the specific View code | ||
27 | pretty simple. | ||
28 | |||