COROUTINE_MANAGEMENT

Fri, 31 Aug 2007 09:34:09 -0400

author
Thomas Harning Jr <harningt@gmail.com>
date
Fri, 31 Aug 2007 09:34:09 -0400
changeset 13
3e2ea1e7b2e8
permissions
-rw-r--r--

Reformed project layout from 'luaevent/*' -> '*'

13
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
1 Due to the issue w/ self-resuming threads and crashing out threads,
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
2 a management system needs to be in place.
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
3
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
4 Example thread system:
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
5
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
6 MAIN
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
7 EVENT_LOOP --------running---
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
8 WAITING ON READ
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
9 WAITING ON WRITE
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
10 WAITING ON CONNECT
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
11
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
12
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
13 Since main and the other 'waiting' threads are yielded, it is unsafe to call things arbitrarily on them
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
14 or resume them from themselves...
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
15 However the EVENT_LOOP one is running and thus can execute the callbacks (which can resume the threads)
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
16 Each of the 'waiting' events are attached to an event and contain a pointer, this pointer can be setup to point
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
17 to a per event_base item which will be updated w/ the lua_State of whatever calls EVENT_LOOP...
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
18 this will guarantee that the thread will be resumed from the currently running EVENT_LOOP
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
19
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
20
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
21 Other system that's more complicated and less likely:
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
22
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
23 MAIN
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
24 EVENT_LOOP a -----running---
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
25
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
26 WAITING ON READ a
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
27 WAITING ON WRITE a
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
28
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
29 EVENT_LOOP b ----yielded
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
30 WAITING ON READ b
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
31
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
32
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
33 Since there can only be one event_loop running per event_base, you do not have to worry about
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
34 cross-pollination of the different waits...
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
35
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
36 NOTES:
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
37 If the event_loop thread goes away... then the waiting coroutines will have no way to get back...
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
38 though in this case, they are dead in the water anyways.. until a new event_loop starts...
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
39 in which case the lua_State references has been updated...

mercurial