Skip to content

11. Actor groups

Canonical source: protos/tutorials/11-actor-groups/ at locked revision e99b712ecf658a527b1fe82c8beba2c1286d8dc9.

These are the executable tutorial sources from the exact Protos revision consumed by this website. The fenced program bodies are copied without modification. The tutorials are explanatory and non-normative; the applicable specification remains authoritative.

Canonical source protos/tutorials/11-actor-groups/01-create-group.protos

/*
* THE LICENSED WORK IS PROVIDED UNDER THE TERMS OF THE ADAPTIVE PUBLIC LICENSE
* ("LICENSE") AS FIRST COMPLETED BY: Guillermo Adrián Molina. ANY USE, PUBLIC
* DISPLAY, PUBLIC PERFORMANCE, REPRODUCTION OR DISTRIBUTION OF, OR PREPARATION OF
* DERIVATIVE WORKS BASED ON, THE LICENSED WORK CONSTITUTES RECIPIENT'S ACCEPTANCE
* OF THIS LICENSE AND ITS TERMS, WHETHER OR NOT SUCH RECIPIENT READS THE TERMS OF
* THE LICENSE. "LICENSED WORK" AND "RECIPIENT" ARE DEFINED IN THE LICENSE. A COPY
* OF THE LICENSE IS LOCATED IN THE TEXT FILE ENTITLED "LICENSE.TXT" ACCOMPANYING
* THE CONTENTS OF THIS FILE.
*/
// Actor.group requires one or more explicit ActorRefs and returns a GroupRef.
first: Actor.spawn("std:collections/Set", "call", "Ada")
second: Actor.spawn("std:collections/Set", "call", "Grace")
workers: Actor.group(first, second)
print(workers === workers)
first.stop()
second.stop()

Canonical source protos/tutorials/11-actor-groups/02-request-through-group.protos

/*
* THE LICENSED WORK IS PROVIDED UNDER THE TERMS OF THE ADAPTIVE PUBLIC LICENSE
* ("LICENSE") AS FIRST COMPLETED BY: Guillermo Adrián Molina. ANY USE, PUBLIC
* DISPLAY, PUBLIC PERFORMANCE, REPRODUCTION OR DISTRIBUTION OF, OR PREPARATION OF
* DERIVATIVE WORKS BASED ON, THE LICENSED WORK CONSTITUTES RECIPIENT'S ACCEPTANCE
* OF THIS LICENSE AND ITS TERMS, WHETHER OR NOT SUCH RECIPIENT READS THE TERMS OF
* THE LICENSE. "LICENSED WORK" AND "RECIPIENT" ARE DEFINED IN THE LICENSE. A COPY
* OF THE LICENSE IS LOCATED IN THE TEXT FILE ENTITLED "LICENSE.TXT" ACCOMPANYING
* THE CONTENTS OF THIS FILE.
*/
// A GroupRef request is routed to one eligible member. Do not rely on which one.
first: Actor.spawn("std:collections/Set", "call", "Ada", "Grace")
second: Actor.spawn("std:collections/Set", "call", "Linus", "Ken")
workers: Actor.group(first, second)
print(workers.request("size").value())
first.stop()
second.stop()

Canonical source protos/tutorials/11-actor-groups/03-groupref-identity.protos

/*
* THE LICENSED WORK IS PROVIDED UNDER THE TERMS OF THE ADAPTIVE PUBLIC LICENSE
* ("LICENSE") AS FIRST COMPLETED BY: Guillermo Adrián Molina. ANY USE, PUBLIC
* DISPLAY, PUBLIC PERFORMANCE, REPRODUCTION OR DISTRIBUTION OF, OR PREPARATION OF
* DERIVATIVE WORKS BASED ON, THE LICENSED WORK CONSTITUTES RECIPIENT'S ACCEPTANCE
* OF THIS LICENSE AND ITS TERMS, WHETHER OR NOT SUCH RECIPIENT READS THE TERMS OF
* THE LICENSE. "LICENSED WORK" AND "RECIPIENT" ARE DEFINED IN THE LICENSE. A COPY
* OF THE LICENSE IS LOCATED IN THE TEXT FILE ENTITLED "LICENSE.TXT" ACCOMPANYING
* THE CONTENTS OF THIS FILE.
*/
// Two acquisitions over the same members create different Group and GroupRef identities.
first: Actor.spawn("std:collections/Set", "call", "Ada")
second: Actor.spawn("std:collections/Set", "call", "Grace")
left: Actor.group(first, second)
right: Actor.group(first, second)
print(left === right)
first.stop()
second.stop()

← Actors · Tutorials index · System resources →