RFC 86 (v1) IPC Mailboxes for Threads and Signals

[email protected] (Perl6 RFC Librarian) 10 Aug 2000 22:34:14 -0000
Newsgroups perl.perl6.language.flow,perl.perl6.announce
Message-ID <[email protected]>
This and other RFCs are available on the web at
  http://dev.perl.org/rfc/

=head1 TITLE

IPC Mailboxes for Threads and Signals

=head1 VERSION

    Maintainer: Uri Guttman <[email protected]>
    Date: 09 Aug 2000
    Version: 1
    Mailing List: [email protected]
    Number: 86

=head1 ABSTRACT

An IPC mailbox is a simple way for threads (or possibly processes) to
communicate without the mess of directly dealing with
semaphores/mutexes/queues.

=head1 DESCRIPTION

A mailbox is a combination of a semaphore and a message queue (or
pipe). You put a message into a mailbox and can call get to retrieve
it. The get call can be blocking or non-blocking but it can't be
asynchronous unless it is built with or associated with a pipe/socket.

There can be special mailboxes created which can be used to
synchronously deliver signals and warn/die callbacks. A thread can block
on a signal mailbox and then when it receives the data and wakes up, it
can proceed and safely do any needed work.

=head1 IMPLEMENTATION

Mailboxes can be built in many ways. A single pipe could be used with
just a reference (or C pointer) being passed down it. Then the async I/O
system would handle delivery and the receiving thread could be woken
up. Alternatively it could be a shared memory linked list with a mutex
surrounding it. That would imply only a blocking API.

=head1 IMPACT

The kind of data you can send to a mailbox is a question. Some RTOSs
have mailboxes where you can only send short data blocks. This is for
efficiency and in many cases the data is just pointers to larger
chunks. We could limit the data in a mailbox to a reference or an object
if that simplifies coding them. Allowing an entire hash tree to be sent
is not a good idea IMO.

=head1 UNKNOWNS

None

=head1 REFERENCES

Event.pm		- XS based event loop module.

RFC #1			- Implementation of Threads in Perl

RFC #47			- Universal Asynchronous I/O (the moby one)

VMS			- It has mailboxes

various RTOSs		- They also have mailboxes