.\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.13)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.ie \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. nr % 0
. rr F
.\}
.el \{\
. de IX
..
.\}
.\" ========================================================================
.\"
.IX Title "Test2::Manual::Anatomy::IPC 3"
.TH Test2::Manual::Anatomy::IPC 3 "2019-05-18" "perl v5.10.1" "User Contributed Perl Documentation"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
Test2::Manual::Anatomy::IPC \- Manual for the IPC system.
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
This document describes the \s-1IPC\s0 system.
.SH "WHAT IS THE IPC SYSTEM"
.IX Header "WHAT IS THE IPC SYSTEM"
The \s-1IPC\s0 system is activated by loading Test2::IPC. This makes hubs
process/thread aware, and makes them forward events along to the parent
process/thread as necessary.
.SH "HOW DOES THE IPC SYSTEM EFFECT EVERYTHING?"
.IX Header "HOW DOES THE IPC SYSTEM EFFECT EVERYTHING?"
Test2::API and Test2::API::Instance have some behaviors that trigger if
Test2::IPC is loaded before the global state is initialized. Mainly an \s-1IPC\s0
driver will be initiated and stored in the global state.
.PP
If an \s-1IPC\s0 driver is initialized then all hubs will be initialized with a
reference to the driver instance. If a hub has an \s-1IPC\s0 driver instance it will
use it to forward events to parent processes and threads.
.SH "WHAT DOES AN IPC DRIVER DO?"
.IX Header "WHAT DOES AN IPC DRIVER DO?"
An Test2::IPC::Driver provides a way to send event data to a destination
process+thread+hub (or to all globally). The driver must also provide a way for
a process/thread/hub to read in any pending events that have been sent to it.
.SH "HOW DOES THE DEFAULT IPC DRIVER WORK?"
.IX Header "HOW DOES THE DEFAULT IPC DRIVER WORK?"
The default \s-1IPC\s0 driver is Test2::API::Driver::Files. This default driver,
when initialized, starts by creating a temporary directory. Any time an event
needs to be sent to another process/thread/hub, the event will be written to a
file using Storable. The file is written with the destination process,
thread, and hub as part of the filename. All hubs will regularly check for
pending \s-1IPC\s0 events and will process them.
.PP
This driver is further optimized using a small chunk of \s-1SHM\s0. Any time a new
event is sent via \s-1IPC\s0 the shm is updated to have a new value. Hubs will not
bother checking for new \s-1IPC\s0 events unless the shm value has changed since their
last poll. A result of this is that the \s-1IPC\s0 system is surprisingly fast, and
does not waste time polling the hard drive when there are no pending events.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
Test2::Manual \- Primary index of the manual.
.SH "SOURCE"
.IX Header "SOURCE"
The source code repository for Test2\-Manual can be found at
\&\fIhttps://github.com/Test\-More/Test2\-Suite/\fR.
.SH "MAINTAINERS"
.IX Header "MAINTAINERS"
.IP "Chad Granum <exodist@cpan.org>" 4
.IX Item "Chad Granum <exodist@cpan.org>"
.SH "AUTHORS"
.IX Header "AUTHORS"
.PD 0
.IP "Chad Granum <exodist@cpan.org>" 4
.IX Item "Chad Granum <exodist@cpan.org>"
.PD
.SH "COPYRIGHT"
.IX Header "COPYRIGHT"
Copyright 2018 Chad Granum <exodist@cpan.org>.
.PP
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
.PP
See \fIhttp://dev.perl.org/licenses/\fR
Copyright 2K16 - 2K18 Indonesian Hacker Rulez