processes

Aaron J. Seigo aseigo at kde.org
Mon Aug 4 17:57:31 UTC 2014


Hi everyone ... 

Was a busy week for me here (including a laptop hardware failure... meh) so 
didn't get back to the list until now. I have continued to push forward the 
specifications, however, and after a good number of revisions processes and 
supervision are ready for your review and feedback.

One of the key features of funq will be these in-process "processes"; much 
like green threads which are run inside a VM and look like threads to the 
application but which are not actually native threads, these "green processes" 
look and behave very much like "real" OS processes but are just long-running 
functions which have their execution transparently suspended and started by a 
scheduler in the VM. This makes them quite cheap and a lot less complex to 
handle.

The goal is to encourage breaking applications up into many cooperative 
processes. This allows:

* compartmentalizing failure: an error in one part of the code leading to a 
crash will not bring down the whole application
* confident coding: most of us have been taught to check and catch all error 
conditions in our code; not only do many developers fail to do this, but it 
leads to hard to maintain code in many cases. If it is a valid idiom to allow 
an error to crash a component, then one can ignore most errors and only code 
for the success paths. A crash then becomes a generic error handler which the 
application can cope with easily.
* concurrency: each VM will be able to run 1 or more schedulers and divide the 
running processes between them; this will allow applications to scale along 
with the number of processor cores available to it
* distribution: rather than having to run an entire application on just one 
computer system, breaking things into processes will allow an application to 
be distributed across multiple discreet computers at runtime and largely 
transparently to the application.[1]

In support of these goals, two important features are available:

1) Message queues: each process gets a message queue and processes can send 
messages to each other. These message queues are asynchronous and can be 
filtered by the receiver

2) Supervisors: a supervisor is a process whose only job is to start process 
and sit and then watch them. Supervisors can restart processes when they crash 
(supports the 'confident coding' concept) as well as manage pools of resources 
(e.g. a pool of database connection processes)

I have documented processes and supervision as I currently intend to implement 
in the git repository under docs/processes.md and docs/supervision.md.

Feedback on them is most welcome ....

A quick overview of relevant API:

// start a process
PID = std.process::exec(MyModule::MyFunc, [param1, param2]);

// send a message to a process without expecting a reply
{ $numbers, [1, 2, 3] } -> PID;

// send a message to a process as a two-way conversation
ConversationId = { $numbers, [1, 2, 3] } <-> PID;

Those are the most important basics when it comes to processes. I'll touch on 
supervision in the next email ...

[1] this opens the door to some truly exciting prospects such as pratical 
multi-agent systems 

-- 
Aaron J. Seigo
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://kde.org/pipermail/funq-devel/attachments/20140804/e472399d/attachment.sig>


More information about the Funq-devel mailing list