NAME

Zing::Process - Processing Unit

ABSTRACT

Processing Unit and Actor Abstraction

SYNOPSIS

use Zing::Process;

my $process = Zing::Process->new;

# $process->execute;

DESCRIPTION

This package provides an actor abstraction which serve as a cooperative concurrent computational unit in an actor-model architecture.

LIBRARIES

This package uses type constraints from:

Zing::Types

ATTRIBUTES

This package has the following attributes:

cleanup

cleanup(Str)

This attribute is read-only, accepts (Str) values, and is optional.

data

data(Data)

This attribute is read-only, accepts (Data) values, and is optional.

journal

journal(Channel)

This attribute is read-only, accepts (Channel) values, and is optional.

log

log(Logger)

This attribute is read-only, accepts (Logger) values, and is optional.

logic

logic(Logic)

This attribute is read-only, accepts (Logic) values, and is optional.

loop

loop(Loop)

This attribute is read-only, accepts (Loop) values, and is optional.

mailbox

mailbox(Mailbox)

This attribute is read-only, accepts (Mailbox) values, and is optional.

meta

meta(Meta)

This attribute is read-only, accepts (Meta) values, and is optional.

name

name(Name)

This attribute is read-only, accepts (Name) values, and is optional.

on_perform

on_perform(Maybe[CodeRef])

This attribute is read-only, accepts (Maybe[CodeRef]) values, and is optional.

on_receive

on_receive(Maybe[CodeRef])

This attribute is read-only, accepts (Maybe[CodeRef]) values, and is optional.

parent

parent(Maybe[Process])

This attribute is read-only, accepts (Maybe[Process]) values, and is optional.

pid

pid(Int)

This attribute is read-only, accepts (Int) values, and is optional.

signals

signals(HashRef[Str|CodeRef])

This attribute is read-only, accepts (HashRef[Str|CodeRef]) values, and is optional.

started

started(Int)

This attribute is read-only, accepts (Int) values, and is optional.

stopped

stopped(Int)

This attribute is read-only, accepts (Int) values, and is optional.

tag

tag(Str)

This attribute is read-only, accepts (Str) values, and is optional.

METHODS

This package implements the following methods:

defer

defer(HashRef $data) : Object

The defer method allows a process to sends a message to itself for later processing.

defer example #1
# given: synopsis

$process->defer({ task => { launch => time } });

destroy

destroy() : Object

The destroy method de-registers the process and drops the process-specific data stores.

destroy example #1
# given: synopsis

$process->destroy;

execute

execute() : Object

The execute method executes the process event-loop indefinitely.

execute example #1
# given: synopsis

$process->execute;

exercise

exercise() : Object

The exercise method executes the event-loop but stops after one iteration.

exercise example #1
# given: synopsis

$process->exercise;

metadata

metadata() : HashRef

The metadata method returns metadata specific to the process.

metadata example #1
# given: synopsis

$process->metadata;

ping

ping(Int $pid) : Bool

The ping method returns truthy if the process of the PID provided is active.

ping example #1
# given: synopsis

$process->ping(12345);

receive

receive(Str $from, HashRef $data) : Any

The receive method, when not overloaded, executes the callback in the "on_receive" attribute for each cycle of the event loop.

receive example #1
# given: synopsis

$process = Zing::Process->new(
  on_receive => sub {
    my ($self, $from, $data) = @_;
    [$from, $data];
  },
);

$process->receive($process->term, { ping => 1 });

recv

recv() : Maybe[HashRef]

The recv method is a proxy for "recv" in Zing::Mailbox and receives a single new message from the mailbox.

recv example #1
# given: synopsis

$process->recv;
recv example #2
# given: synopsis

my $peer = Zing::Process->new;

$peer->send($process, { note => 'ehlo' });

$process->recv;

reply

reply(HashRef $bag, HashRef $value) : Int

The reply method is a proxy for "reply" in Zing::Mailbox and sends a message to the mailbox represented by the $bag received.

reply example #1
# given: synopsis

my $peer = Zing::Process->new;

$peer->send($process, { note => 'ehlo' });

my $mail = $process->recv;

$process->reply($mail, { note => 'helo' });

send

send(Mailbox | Process | Str $to, HashRef $data) : Int

The send method is a proxy for "send" in Zing::Mailbox and sends a new message to the mailbox specified.

send example #1
# given: synopsis

my $peer = Zing::Process->new;

$process->send($peer, { note => 'invite' });
send example #2
# given: synopsis

my $peer = Zing::Process->new;

$process->send($peer->mailbox, { note => 'invite' });
send example #3
# given: synopsis

my $peer = Zing::Process->new;

$process->send($peer->mailbox->term, { note => 'invite' });

shutdown

shutdown() : Object

The shutdown method haults the process event-loop immediately.

shutdown example #1
# given: synopsis

$process->shutdown;

signal

signal(Int $pid, Str $type = 'kill') : Int

The signal method sends a kill signal to the process of the PID provided.

signal example #1
# given: synopsis

$process->signal(12345);
signal example #2
# given: synopsis

$process->signal(12345, 'term');

spawn

spawn(Scheme $scheme) : Fork

The spawn method forks a scheme and returns a Zing::Fork handler.

spawn example #1
# given: synopsis

$process->spawn(['MyApp', [], 1]);

term

term() : Str

The term method generates a term (safe string) for the datastore.

term example #1
# given: synopsis

$process->term;

winddown

winddown() : Object

The winddown method haults the process event-loop after the current iteration.

winddown example #1
# given: synopsis

$process->winddown;

AUTHOR

Al Newkirk, awncorp@cpan.org

LICENSE

Copyright (C) 2011-2019, Al Newkirk, et al.

This is free software; you can redistribute it and/or modify it under the terms of the The Apache License, Version 2.0, as elucidated in the "license file".

PROJECT

Wiki

Project

Initiatives

Milestones

Contributing

Issues