From c192f12b0fecf3557f9e04875f81bd96b223c772 Mon Sep 17 00:00:00 2001 From: David Lawrence Date: Tue, 14 Mar 2000 04:10:42 +0000 Subject: [PATCH] notes from today's task discussion --- doc/design/tasks | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/doc/design/tasks b/doc/design/tasks index 53d28e5522..fa7dfd8deb 100644 --- a/doc/design/tasks +++ b/doc/design/tasks @@ -27,3 +27,40 @@ Task termination occurs when: The task has no references The task has an empty event queue + +Notes from the task/event discussion led by Bob Halley on 13 March 2000: + +A task is an event queue. + + (task) --V + (event)-->(event)-->(event) + + (runnable queue)--V + (task)-->(task)-->(task) + +Normally only one task manager in an application. + +Task becomes runnable if it has a non-empty event queue. + +One or more worker threads run tasks. + +Event routines should be relatively short. + +Only one runnable queue that all workers share. + +Events for a task are always posted serially. Multiple worker threads +will not be working on multiple events for one task at the same time. + +isc_event_send, posting an event, can't fail. It just adds an event +to the task queue. + +Event action (callback) rules: + * no locks held on your behald when entering a callback. + * not allowed to block, except when aquiring a lock. + * not allowed to hold a lock when exiting the callback. + + +TIMERS? + +OMAPI -- need taskmgr to omapi_lib_init + -- one task per client connection