Go to the first, previous, next, last section, table of contents.


Jobs

Muq MUF provides pre-emptive multitasking facilities which are in some respects comparable to threads provided by Unix: Each user may have multiple jobs scheduled to run (or waiting on I/O) at any given time, each with its own call and evaluation stack. Execution of ready-to-run jobs is interleaved in an attempt to give each user an equal share of available processing power. Jobs are organized into jobsets similar to Unix process groups, which in turn are organized into sessions corresponding roughly to a single user login: Usually each session is associated with a single Socket object and vice versa. Jobs, jobsets and sessions may be created via fork primitives and killed by signals. Jobs may be moved in and out of jobqueues under softcode control, allowing high-level scheduling algorithms to be coded in-db.

MUF functions use @ to get a pointer to the job executing them. As usual, lss is your friend:

root:
@ lss
:dbname	"ROOTDB"
:isA	#<MosClass Job 3f9fd15>
:myclass	"job"
:owner	#<Root root 2c015>
:lib	#<Index .u.roo%s.lib 91e915>
:package	#<Package root 422a15>
:name	3
:compiler	#<an ephemeral context>
:muqnetIo	0
:pid	3
:standardOutput	#<MessageStream _ caee15>
:standardInput	#<MessageStream _ caee15>
:killStandardOutputOnExit	nil
:errorOutput	#<MessageStream _ caee15>
:promiscuousNoFragments	0
:doingPromiscuousRead	nil
:debugIo	#<MessageStream _ caee15>
:dataStack	#<DataStack _ 2b51e815>
:breakOnSignal	nil
:breakEnable	nil
:breakDisable	nil
:actualUser	#<Root root 2c015>
:actingUser	#<Root root 2c015>
:endJob	0
:doSignal	'muf:]doSignal
:doError	#:doError
:debuggerHook	nil
:debugger	'debug:mufDebugger
:doBreak	'muf:]doBreak
:variableBindings	0
:traceOutput	#<MessageStream _ caee15>
:terminalIo	#<MessageStream _ caee15>
:state	"1"
:stackBottom	1
:spareCompileMessageStream	0
:spareAssembler	0
:sleepUntilMillisec	0
:root	#<DatabaseFile ROOTDB 24815>
:task	0
:reportEvent	#:reportEvent
:readtable	#<ReadTable _ 37b15>
:readNilFromDeadStreams	nil
:queryIo	#<MessageStream _ caee15>
:priority	1
:parentJob	#<Job jb0 33115>
:opCount	2971
:loopStack	#<LoopStack _ 2b49ea15>
:jobSet	#<JobSet _ 17d22615>
:here	#<Root root 2c015>
:group	0
:functionBindings	0
:ephemeralVectors	0
:ephemeralStructs	74
:ephemeralObjects	0
:ephemeralList	0
root: 


Go to the first, previous, next, last section, table of contents.