swactor/docs/dataflow.svg
zacheryasc ef08d3e7a5 feat: transport protocol (#27)
Address actors via ID, send messages over transport (TCP, QUIC, etc)
2026-02-09 19:05:37 +00:00

806 lines
68 KiB
XML

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 14.1.1 (20251213.1925)
-->
<!-- Title: dataflow Pages: 1 -->
<svg width="2635pt" height="973pt"
viewBox="0.00 0.00 2635.00 973.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 969)">
<title>dataflow</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-969 2630.68,-969 2630.68,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_legend</title>
<path fill="none" stroke="#888888" d="M20,-8C20,-8 251.44,-8 251.44,-8 257.44,-8 263.44,-14 263.44,-20 263.44,-20 263.44,-165 263.44,-165 263.44,-171 257.44,-177 251.44,-177 251.44,-177 20,-177 20,-177 14,-177 8,-171 8,-165 8,-165 8,-20 8,-20 8,-14 14,-8 20,-8"/>
<text xml:space="preserve" text-anchor="middle" x="53.9" y="-163.1" font-family="Helvetica,sans-Serif" font-size="11.00">Data on Arrows</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_flow_a</title>
<path fill="#fdedec" stroke="#c0392b" d="M112.72,-185C112.72,-185 2422.02,-185 2422.02,-185 2428.02,-185 2434.02,-191 2434.02,-197 2434.02,-197 2434.02,-254 2434.02,-254 2434.02,-260 2428.02,-266 2422.02,-266 2422.02,-266 112.72,-266 112.72,-266 106.72,-266 100.72,-260 100.72,-254 100.72,-254 100.72,-197 100.72,-197 100.72,-191 106.72,-185 112.72,-185"/>
<text xml:space="preserve" text-anchor="start" x="108.72" y="-252.1" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#922b21">FLOW A — Cross&#45;Worker Message Send</text>
</g>
<g id="clust3" class="cluster">
<title>cluster_flow_b</title>
<path fill="#ebf5fb" stroke="#2980b9" d="M81.25,-274C81.25,-274 1999.84,-274 1999.84,-274 2005.84,-274 2011.84,-280 2011.84,-286 2011.84,-286 2011.84,-355 2011.84,-355 2011.84,-361 2005.84,-367 1999.84,-367 1999.84,-367 81.25,-367 81.25,-367 75.25,-367 69.25,-361 69.25,-355 69.25,-355 69.25,-286 69.25,-286 69.25,-280 75.25,-274 81.25,-274"/>
<text xml:space="preserve" text-anchor="start" x="77.25" y="-353.1" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#1a5276">FLOW B — Same&#45;Worker Message Send (during tick)</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_flow_c</title>
<path fill="#eafaf1" stroke="#27ae60" d="M92.26,-375C92.26,-375 2606.68,-375 2606.68,-375 2612.68,-375 2618.68,-381 2618.68,-387 2618.68,-387 2618.68,-446 2618.68,-446 2618.68,-452 2612.68,-458 2606.68,-458 2606.68,-458 92.26,-458 92.26,-458 86.26,-458 80.26,-452 80.26,-446 80.26,-446 80.26,-387 80.26,-387 80.26,-381 86.26,-375 92.26,-375"/>
<text xml:space="preserve" text-anchor="start" x="88.26" y="-444.1" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#1e8449">FLOW C — Actor Spawn</text>
</g>
<g id="clust5" class="cluster">
<title>cluster_flow_d</title>
<path fill="#e8f8f5" stroke="#117864" d="M93.09,-466C93.09,-466 1687.49,-466 1687.49,-466 1693.49,-466 1699.49,-472 1699.49,-478 1699.49,-478 1699.49,-651 1699.49,-651 1699.49,-657 1693.49,-663 1687.49,-663 1687.49,-663 93.09,-663 93.09,-663 87.09,-663 81.09,-657 81.09,-651 81.09,-651 81.09,-478 81.09,-478 81.09,-472 87.09,-466 93.09,-466"/>
<text xml:space="preserve" text-anchor="start" x="89.09" y="-649.1" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0e6655">FLOW D — External Inbox</text>
</g>
<g id="clust6" class="cluster">
<title>cluster_flow_e</title>
<path fill="#f4ecf7" stroke="#6c3483" d="M95.31,-671C95.31,-671 2253.94,-671 2253.94,-671 2259.94,-671 2265.94,-677 2265.94,-683 2265.94,-683 2265.94,-945 2265.94,-945 2265.94,-951 2259.94,-957 2253.94,-957 2253.94,-957 95.31,-957 95.31,-957 89.31,-957 83.31,-951 83.31,-945 83.31,-945 83.31,-683 83.31,-683 83.31,-677 89.31,-671 95.31,-671"/>
<text xml:space="preserve" text-anchor="start" x="91.31" y="-943.1" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#6c3483">FLOW E — The 6&#45;Phase Tick Cycle (Worker::tick_once)</text>
</g>
<!-- dlegend -->
<g id="node1" class="node">
<title>dlegend</title>
<text xml:space="preserve" text-anchor="start" x="30" y="-130" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="10.00" fill="#c0392b">━━━</text>
<text xml:space="preserve" text-anchor="start" x="63" y="-129" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#c0392b">Envelope (dest + payload)</text>
<text xml:space="preserve" text-anchor="start" x="30" y="-110" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="10.00" fill="#27ae60">━━━</text>
<text xml:space="preserve" text-anchor="start" x="63" y="-109" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#27ae60">Spawn tuple (addr, Box&lt;dyn AnyActor&gt;)</text>
<text xml:space="preserve" text-anchor="start" x="30" y="-90" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="10.00" fill="#2980b9">━━━</text>
<text xml:space="preserve" text-anchor="start" x="63" y="-89" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#2980b9">Pending local (addr, Box&lt;dyn Any&gt;)</text>
<text xml:space="preserve" text-anchor="start" x="30" y="-70" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="10.00" fill="#8e44ad">━━━</text>
<text xml:space="preserve" text-anchor="start" x="63" y="-69" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#8e44ad">Box&lt;dyn Any + Send&gt; (raw message)</text>
<text xml:space="preserve" text-anchor="start" x="30" y="-50" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="10.00" fill="#e67300">━━━</text>
<text xml:space="preserve" text-anchor="start" x="63" y="-49" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#e67300">Stats (atomics)</text>
<text xml:space="preserve" text-anchor="start" x="30" y="-30" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="10.00" fill="#117864">━━━</text>
<text xml:space="preserve" text-anchor="start" x="63" y="-29" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#117864">WorkerId (lookup result)</text>
</g>
<!-- a_caller -->
<g id="node2" class="node">
<title>a_caller</title>
<ellipse fill="#f5b7b1" stroke="black" cx="135.72" cy="-215" rx="27" ry="18"/>
<text xml:space="preserve" text-anchor="middle" x="135.72" y="-212" font-family="Helvetica,sans-Serif" font-size="10.00">Caller</text>
</g>
<!-- a_send -->
<g id="node3" class="node">
<title>a_send</title>
<path fill="white" stroke="black" d="M494.57,-233C494.57,-233 410.31,-233 410.31,-233 404.31,-233 398.31,-227 398.31,-221 398.31,-221 398.31,-209 398.31,-209 398.31,-203 404.31,-197 410.31,-197 410.31,-197 494.57,-197 494.57,-197 500.57,-197 506.57,-203 506.57,-209 506.57,-209 506.57,-221 506.57,-221 506.57,-227 500.57,-233 494.57,-233"/>
<text xml:space="preserve" text-anchor="middle" x="452.44" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">Runtime</text>
<text xml:space="preserve" text-anchor="middle" x="452.44" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">::send_to(addr, msg)</text>
</g>
<!-- a_caller&#45;&gt;a_send -->
<g id="edge1" class="edge">
<title>a_caller&#45;&gt;a_send</title>
<path fill="none" stroke="#333333" d="M163.01,-215C211.85,-215 317.87,-215 386.87,-215"/>
<polygon fill="#333333" stroke="#333333" points="386.52,-218.5 396.52,-215 386.52,-211.5 386.52,-218.5"/>
</g>
<!-- a_lookup -->
<g id="node4" class="node">
<title>a_lookup</title>
<path fill="#e8daef" stroke="black" d="M750.59,-233C750.59,-233 696.89,-233 696.89,-233 690.89,-233 684.89,-227 684.89,-221 684.89,-221 684.89,-209 684.89,-209 684.89,-203 690.89,-197 696.89,-197 696.89,-197 750.59,-197 750.59,-197 756.59,-197 762.59,-203 762.59,-209 762.59,-209 762.59,-221 762.59,-221 762.59,-227 756.59,-233 750.59,-233"/>
<text xml:space="preserve" text-anchor="middle" x="723.74" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">AddressMap</text>
<text xml:space="preserve" text-anchor="middle" x="723.74" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">::lookup(addr)</text>
</g>
<!-- a_send&#45;&gt;a_lookup -->
<g id="edge2" class="edge">
<title>a_send&#45;&gt;a_lookup</title>
<path fill="none" stroke="#333333" d="M506.97,-215C555.33,-215 625.95,-215 673.08,-215"/>
<polygon fill="#333333" stroke="#333333" points="673.01,-218.5 683.01,-215 673.01,-211.5 673.01,-218.5"/>
</g>
<!-- a_box -->
<g id="node5" class="node">
<title>a_box</title>
<path fill="white" stroke="black" d="M1065.68,-233C1065.68,-233 1007,-233 1007,-233 1001,-233 995,-227 995,-221 995,-221 995,-209 995,-209 995,-203 1001,-197 1007,-197 1007,-197 1065.68,-197 1065.68,-197 1071.68,-197 1077.68,-203 1077.68,-209 1077.68,-209 1077.68,-221 1077.68,-221 1077.68,-227 1071.68,-233 1065.68,-233"/>
<text xml:space="preserve" text-anchor="middle" x="1036.34" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">Box::new(msg)</text>
<text xml:space="preserve" text-anchor="middle" x="1036.34" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">→ Envelope</text>
</g>
<!-- a_lookup&#45;&gt;a_box -->
<g id="edge3" class="edge">
<title>a_lookup&#45;&gt;a_box</title>
<path fill="none" stroke="#117864" d="M762.83,-215C818.26,-215 921.33,-215 983.59,-215"/>
<polygon fill="#117864" stroke="#117864" points="983.21,-218.5 993.21,-215 983.21,-211.5 983.21,-218.5"/>
<text xml:space="preserve" text-anchor="middle" x="869.07" y="-217.7" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#117864">WorkerId</text>
</g>
<!-- a_tx -->
<g id="node6" class="node">
<title>a_tx</title>
<path fill="#d1f2eb" stroke="black" d="M1347.65,-237C1347.65,-237 1303.41,-237 1303.41,-237 1297.41,-237 1291.41,-231 1291.41,-225 1291.41,-225 1291.41,-205 1291.41,-205 1291.41,-199 1297.41,-193 1303.41,-193 1303.41,-193 1347.65,-193 1347.65,-193 1353.65,-193 1359.65,-199 1359.65,-205 1359.65,-205 1359.65,-225 1359.65,-225 1359.65,-231 1353.65,-237 1347.65,-237"/>
<text xml:space="preserve" text-anchor="middle" x="1325.53" y="-224" font-family="Helvetica,sans-Serif" font-size="10.00">transfer_txs</text>
<text xml:space="preserve" text-anchor="middle" x="1325.53" y="-212" font-family="Helvetica,sans-Serif" font-size="10.00">[worker_id]</text>
<text xml:space="preserve" text-anchor="middle" x="1325.53" y="-200" font-family="Helvetica,sans-Serif" font-size="10.00">.try_send()</text>
</g>
<!-- a_box&#45;&gt;a_tx -->
<g id="edge4" class="edge">
<title>a_box&#45;&gt;a_tx</title>
<path fill="none" stroke="#c0392b" stroke-width="2" d="M1077.88,-215C1130.73,-215 1222.95,-215 1278.41,-215"/>
<polygon fill="#c0392b" stroke="#c0392b" stroke-width="2" points="1278.31,-218.5 1288.31,-215 1278.31,-211.5 1278.31,-218.5"/>
<text xml:space="preserve" text-anchor="middle" x="1195.12" y="-217.7" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#c0392b">Envelope</text>
</g>
<!-- a_hybrid -->
<g id="node7" class="node">
<title>a_hybrid</title>
<path fill="#d1f2eb" stroke="black" d="M1682.32,-233C1682.32,-235.21 1663.54,-237 1640.42,-237 1617.3,-237 1598.51,-235.21 1598.51,-233 1598.51,-233 1598.51,-197 1598.51,-197 1598.51,-194.79 1617.3,-193 1640.42,-193 1663.54,-193 1682.32,-194.79 1682.32,-197 1682.32,-197 1682.32,-233 1682.32,-233"/>
<path fill="none" stroke="black" d="M1682.32,-233C1682.32,-230.79 1663.54,-229 1640.42,-229 1617.3,-229 1598.51,-230.79 1598.51,-233"/>
<text xml:space="preserve" text-anchor="middle" x="1640.42" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">HybridChannel</text>
<text xml:space="preserve" text-anchor="middle" x="1640.42" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">ring → overflow</text>
</g>
<!-- a_tx&#45;&gt;a_hybrid -->
<g id="edge5" class="edge">
<title>a_tx&#45;&gt;a_hybrid</title>
<path fill="none" stroke="#c0392b" stroke-width="2" d="M1360.02,-215C1413.92,-215 1520.45,-215 1585.26,-215"/>
<polygon fill="#c0392b" stroke="#c0392b" stroke-width="2" points="1585.01,-218.5 1595.01,-215 1585.01,-211.5 1585.01,-218.5"/>
<text xml:space="preserve" text-anchor="middle" x="1471.7" y="-217.7" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#c0392b">Envelope</text>
</g>
<!-- a_rx -->
<g id="node8" class="node">
<title>a_rx</title>
<path fill="#fadbd8" stroke="black" d="M1986.84,-237C1986.84,-237 1947.04,-237 1947.04,-237 1941.04,-237 1935.04,-231 1935.04,-225 1935.04,-225 1935.04,-205 1935.04,-205 1935.04,-199 1941.04,-193 1947.04,-193 1947.04,-193 1986.84,-193 1986.84,-193 1992.84,-193 1998.84,-199 1998.84,-205 1998.84,-205 1998.84,-225 1998.84,-225 1998.84,-231 1992.84,-237 1986.84,-237"/>
<text xml:space="preserve" text-anchor="middle" x="1966.94" y="-224" font-family="Helvetica,sans-Serif" font-size="10.00">Worker</text>
<text xml:space="preserve" text-anchor="middle" x="1966.94" y="-212" font-family="Helvetica,sans-Serif" font-size="10.00">transfer_rx</text>
<text xml:space="preserve" text-anchor="middle" x="1966.94" y="-200" font-family="Helvetica,sans-Serif" font-size="10.00">.try_recv()</text>
</g>
<!-- a_hybrid&#45;&gt;a_rx -->
<g id="edge6" class="edge">
<title>a_hybrid&#45;&gt;a_rx</title>
<path fill="none" stroke="#c0392b" stroke-width="2" d="M1682.52,-215C1743.85,-215 1858.85,-215 1921.87,-215"/>
<polygon fill="#c0392b" stroke="#c0392b" stroke-width="2" points="1921.83,-218.5 1931.83,-215 1921.83,-211.5 1921.83,-218.5"/>
<text xml:space="preserve" text-anchor="middle" x="1805.63" y="-217.7" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#c0392b">Envelope</text>
</g>
<!-- a_deliver -->
<g id="node9" class="node">
<title>a_deliver</title>
<path fill="#fadbd8" stroke="black" d="M2245.95,-233C2245.95,-233 2192.26,-233 2192.26,-233 2186.26,-233 2180.26,-227 2180.26,-221 2180.26,-221 2180.26,-209 2180.26,-209 2180.26,-203 2186.26,-197 2192.26,-197 2192.26,-197 2245.95,-197 2245.95,-197 2251.95,-197 2257.95,-203 2257.95,-209 2257.95,-209 2257.95,-221 2257.95,-221 2257.95,-227 2251.95,-233 2245.95,-233"/>
<text xml:space="preserve" text-anchor="middle" x="2219.1" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">ActorPool</text>
<text xml:space="preserve" text-anchor="middle" x="2219.1" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">::deliver(addr)</text>
</g>
<!-- a_rx&#45;&gt;a_deliver -->
<g id="edge7" class="edge">
<title>a_rx&#45;&gt;a_deliver</title>
<path fill="none" stroke="#c0392b" stroke-width="2" d="M1999.12,-215C2041.2,-215 2116.7,-215 2167.11,-215"/>
<polygon fill="#c0392b" stroke="#c0392b" stroke-width="2" points="2166.95,-218.5 2176.95,-215 2166.95,-211.5 2166.95,-218.5"/>
<text xml:space="preserve" text-anchor="middle" x="2125.01" y="-217.7" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#c0392b">Envelope</text>
</g>
<!-- a_mailbox -->
<g id="node10" class="node">
<title>a_mailbox</title>
<path fill="#fadbd8" stroke="black" d="M2414.02,-237C2414.02,-237 2364.21,-237 2364.21,-237 2358.21,-237 2352.21,-231 2352.21,-225 2352.21,-225 2352.21,-205 2352.21,-205 2352.21,-199 2358.21,-193 2364.21,-193 2364.21,-193 2414.02,-193 2414.02,-193 2420.02,-193 2426.02,-199 2426.02,-205 2426.02,-205 2426.02,-225 2426.02,-225 2426.02,-231 2420.02,-237 2414.02,-237"/>
<text xml:space="preserve" text-anchor="middle" x="2389.11" y="-224" font-family="Helvetica,sans-Serif" font-size="10.00">ActorSlot</text>
<text xml:space="preserve" text-anchor="middle" x="2389.11" y="-212" font-family="Helvetica,sans-Serif" font-size="10.00">mailbox</text>
<text xml:space="preserve" text-anchor="middle" x="2389.11" y="-200" font-family="Helvetica,sans-Serif" font-size="10.00">.push_back()</text>
</g>
<!-- a_deliver&#45;&gt;a_mailbox -->
<g id="edge8" class="edge">
<title>a_deliver&#45;&gt;a_mailbox</title>
<path fill="none" stroke="#8e44ad" stroke-width="1.5" d="M2258.23,-215C2282.36,-215 2313.77,-215 2339.66,-215"/>
<polygon fill="#8e44ad" stroke="#8e44ad" stroke-width="1.5" points="2339.6,-218.5 2349.6,-215 2339.6,-211.5 2339.6,-218.5"/>
<text xml:space="preserve" text-anchor="middle" x="2306.19" y="-217.7" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#8e44ad">payload</text>
</g>
<!-- b_actor -->
<g id="node11" class="node">
<title>b_actor</title>
<ellipse fill="#aed6f1" stroke="black" cx="135.72" cy="-310" rx="58.47" ry="22.63"/>
<text xml:space="preserve" text-anchor="middle" x="135.72" y="-313" font-family="Helvetica,sans-Serif" font-size="10.00">Actor::handle()</text>
<text xml:space="preserve" text-anchor="middle" x="135.72" y="-301" font-family="Helvetica,sans-Serif" font-size="10.00">calls ctx.send()</text>
</g>
<!-- b_wctx -->
<g id="node12" class="node">
<title>b_wctx</title>
<path fill="#fadbd8" stroke="black" d="M481.78,-328C481.78,-328 423.1,-328 423.1,-328 417.1,-328 411.1,-322 411.1,-316 411.1,-316 411.1,-304 411.1,-304 411.1,-298 417.1,-292 423.1,-292 423.1,-292 481.78,-292 481.78,-292 487.78,-292 493.78,-298 493.78,-304 493.78,-304 493.78,-316 493.78,-316 493.78,-322 487.78,-328 481.78,-328"/>
<text xml:space="preserve" text-anchor="middle" x="452.44" y="-313" font-family="Helvetica,sans-Serif" font-size="10.00">WorkerContext</text>
<text xml:space="preserve" text-anchor="middle" x="452.44" y="-301" font-family="Helvetica,sans-Serif" font-size="10.00">::send_any()</text>
</g>
<!-- b_actor&#45;&gt;b_wctx -->
<g id="edge9" class="edge">
<title>b_actor&#45;&gt;b_wctx</title>
<path fill="none" stroke="#333333" d="M194.44,-310C253.05,-310 342.97,-310 399.43,-310"/>
<polygon fill="#333333" stroke="#333333" points="399.09,-313.5 409.09,-310 399.09,-306.5 399.09,-313.5"/>
</g>
<!-- b_lookup -->
<g id="node13" class="node">
<title>b_lookup</title>
<path fill="#e8daef" stroke="black" d="M750.59,-328C750.59,-328 696.89,-328 696.89,-328 690.89,-328 684.89,-322 684.89,-316 684.89,-316 684.89,-304 684.89,-304 684.89,-298 690.89,-292 696.89,-292 696.89,-292 750.59,-292 750.59,-292 756.59,-292 762.59,-298 762.59,-304 762.59,-304 762.59,-316 762.59,-316 762.59,-322 756.59,-328 750.59,-328"/>
<text xml:space="preserve" text-anchor="middle" x="723.74" y="-313" font-family="Helvetica,sans-Serif" font-size="10.00">AddressMap</text>
<text xml:space="preserve" text-anchor="middle" x="723.74" y="-301" font-family="Helvetica,sans-Serif" font-size="10.00">::lookup(addr)</text>
</g>
<!-- b_wctx&#45;&gt;b_lookup -->
<g id="edge10" class="edge">
<title>b_wctx&#45;&gt;b_lookup</title>
<path fill="none" stroke="#333333" d="M494.05,-310C541.9,-310 621.39,-310 672.92,-310"/>
<polygon fill="#333333" stroke="#333333" points="672.91,-313.5 682.91,-310 672.91,-306.5 672.91,-313.5"/>
</g>
<!-- b_pending -->
<g id="node14" class="node">
<title>b_pending</title>
<path fill="#d6eaf8" stroke="black" d="M1073.46,-332C1073.46,-332 999.22,-332 999.22,-332 993.22,-332 987.22,-326 987.22,-320 987.22,-320 987.22,-300 987.22,-300 987.22,-294 993.22,-288 999.22,-288 999.22,-288 1073.46,-288 1073.46,-288 1079.46,-288 1085.46,-294 1085.46,-300 1085.46,-300 1085.46,-320 1085.46,-320 1085.46,-326 1079.46,-332 1073.46,-332"/>
<text xml:space="preserve" text-anchor="middle" x="1036.34" y="-319" font-family="Helvetica,sans-Serif" font-size="10.00">pending_local</text>
<text xml:space="preserve" text-anchor="middle" x="1036.34" y="-307" font-family="Helvetica,sans-Serif" font-size="10.00">.borrow_mut()</text>
<text xml:space="preserve" text-anchor="middle" x="1036.34" y="-295" font-family="Helvetica,sans-Serif" font-size="10.00">.push((addr, msg))</text>
</g>
<!-- b_lookup&#45;&gt;b_pending -->
<g id="edge11" class="edge">
<title>b_lookup&#45;&gt;b_pending</title>
<path fill="none" stroke="#117864" d="M762.83,-310C815.9,-310 912.63,-310 975.41,-310"/>
<polygon fill="#117864" stroke="#117864" points="975.21,-313.5 985.21,-310 975.21,-306.5 975.21,-313.5"/>
<text xml:space="preserve" text-anchor="middle" x="869.07" y="-312.7" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#117864">same WorkerId</text>
</g>
<!-- b_phase5 -->
<g id="node15" class="node">
<title>b_phase5</title>
<polygon fill="#f9e79f" stroke="black" stroke-width="2" points="1356.31,-338 1294.75,-338 1294.75,-282 1356.31,-282 1356.31,-338"/>
<text xml:space="preserve" text-anchor="middle" x="1325.53" y="-325" font-family="Helvetica,sans-Serif" font-size="10.00">Phase 5:</text>
<text xml:space="preserve" text-anchor="middle" x="1325.53" y="-313" font-family="Helvetica,sans-Serif" font-size="10.00">DELIVER</text>
<text xml:space="preserve" text-anchor="middle" x="1325.53" y="-301" font-family="Helvetica,sans-Serif" font-size="10.00">PENDING</text>
<text xml:space="preserve" text-anchor="middle" x="1325.53" y="-289" font-family="Helvetica,sans-Serif" font-size="10.00">LOCAL</text>
</g>
<!-- b_pending&#45;&gt;b_phase5 -->
<g id="edge12" class="edge">
<title>b_pending&#45;&gt;b_phase5</title>
<path fill="none" stroke="#2980b9" stroke-width="1.5" stroke-dasharray="5,2" d="M1085.73,-310C1140.82,-310 1229.92,-310 1282.3,-310"/>
<polygon fill="#2980b9" stroke="#2980b9" stroke-width="1.5" points="1282.2,-313.5 1292.2,-310 1282.2,-306.5 1282.2,-313.5"/>
<text xml:space="preserve" text-anchor="middle" x="1195.12" y="-312.7" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#2980b9">buffered</text>
</g>
<!-- b_deliver -->
<g id="node16" class="node">
<title>b_deliver</title>
<path fill="#fadbd8" stroke="black" d="M1667.26,-328C1667.26,-328 1613.57,-328 1613.57,-328 1607.57,-328 1601.57,-322 1601.57,-316 1601.57,-316 1601.57,-304 1601.57,-304 1601.57,-298 1607.57,-292 1613.57,-292 1613.57,-292 1667.26,-292 1667.26,-292 1673.26,-292 1679.26,-298 1679.26,-304 1679.26,-304 1679.26,-316 1679.26,-316 1679.26,-322 1673.26,-328 1667.26,-328"/>
<text xml:space="preserve" text-anchor="middle" x="1640.42" y="-313" font-family="Helvetica,sans-Serif" font-size="10.00">ActorPool</text>
<text xml:space="preserve" text-anchor="middle" x="1640.42" y="-301" font-family="Helvetica,sans-Serif" font-size="10.00">::deliver(addr)</text>
</g>
<!-- b_phase5&#45;&gt;b_deliver -->
<g id="edge13" class="edge">
<title>b_phase5&#45;&gt;b_deliver</title>
<path fill="none" stroke="#2980b9" stroke-width="2" d="M1356.53,-310C1410.05,-310 1522.53,-310 1588.4,-310"/>
<polygon fill="#2980b9" stroke="#2980b9" stroke-width="2" points="1588.28,-313.5 1598.28,-310 1588.28,-306.5 1588.28,-313.5"/>
<text xml:space="preserve" text-anchor="middle" x="1471.7" y="-312.7" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#2980b9">(addr, payload)</text>
</g>
<!-- b_mailbox -->
<g id="node17" class="node">
<title>b_mailbox</title>
<path fill="#fadbd8" stroke="black" d="M1991.84,-332C1991.84,-332 1942.04,-332 1942.04,-332 1936.04,-332 1930.04,-326 1930.04,-320 1930.04,-320 1930.04,-300 1930.04,-300 1930.04,-294 1936.04,-288 1942.04,-288 1942.04,-288 1991.84,-288 1991.84,-288 1997.84,-288 2003.84,-294 2003.84,-300 2003.84,-300 2003.84,-320 2003.84,-320 2003.84,-326 1997.84,-332 1991.84,-332"/>
<text xml:space="preserve" text-anchor="middle" x="1966.94" y="-319" font-family="Helvetica,sans-Serif" font-size="10.00">ActorSlot</text>
<text xml:space="preserve" text-anchor="middle" x="1966.94" y="-307" font-family="Helvetica,sans-Serif" font-size="10.00">mailbox</text>
<text xml:space="preserve" text-anchor="middle" x="1966.94" y="-295" font-family="Helvetica,sans-Serif" font-size="10.00">.push_back()</text>
</g>
<!-- b_deliver&#45;&gt;b_mailbox -->
<g id="edge14" class="edge">
<title>b_deliver&#45;&gt;b_mailbox</title>
<path fill="none" stroke="#8e44ad" stroke-width="1.5" d="M1679.6,-310C1738.94,-310 1853.2,-310 1918.01,-310"/>
<polygon fill="#8e44ad" stroke="#8e44ad" stroke-width="1.5" points="1917.62,-313.5 1927.62,-310 1917.62,-306.5 1917.62,-313.5"/>
<text xml:space="preserve" text-anchor="middle" x="1805.63" y="-312.7" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#8e44ad">payload</text>
</g>
<!-- c_caller -->
<g id="node18" class="node">
<title>c_caller</title>
<ellipse fill="#a9dfbf" stroke="black" cx="135.72" cy="-406" rx="47.46" ry="22.63"/>
<text xml:space="preserve" text-anchor="middle" x="135.72" y="-409" font-family="Helvetica,sans-Serif" font-size="10.00">Caller /</text>
<text xml:space="preserve" text-anchor="middle" x="135.72" y="-397" font-family="Helvetica,sans-Serif" font-size="10.00">ctx.spawn()</text>
</g>
<!-- c_spawn -->
<g id="node19" class="node">
<title>c_spawn</title>
<path fill="white" stroke="black" d="M480.12,-424C480.12,-424 424.76,-424 424.76,-424 418.76,-424 412.76,-418 412.76,-412 412.76,-412 412.76,-400 412.76,-400 412.76,-394 418.76,-388 424.76,-388 424.76,-388 480.12,-388 480.12,-388 486.12,-388 492.12,-394 492.12,-400 492.12,-400 492.12,-412 492.12,-412 492.12,-418 486.12,-424 480.12,-424"/>
<text xml:space="preserve" text-anchor="middle" x="452.44" y="-409" font-family="Helvetica,sans-Serif" font-size="10.00">Runtime</text>
<text xml:space="preserve" text-anchor="middle" x="452.44" y="-397" font-family="Helvetica,sans-Serif" font-size="10.00">::spawn(actor)</text>
</g>
<!-- c_caller&#45;&gt;c_spawn -->
<g id="edge15" class="edge">
<title>c_caller&#45;&gt;c_spawn</title>
<path fill="none" stroke="#333333" d="M183.5,-406C241.77,-406 340.95,-406 400.92,-406"/>
<polygon fill="#333333" stroke="#333333" points="400.85,-409.5 410.85,-406 400.85,-402.5 400.85,-409.5"/>
</g>
<!-- c_addr -->
<g id="node20" class="node">
<title>c_addr</title>
<path fill="#d5f5e3" stroke="black" d="M754.76,-424C754.76,-424 692.73,-424 692.73,-424 686.73,-424 680.73,-418 680.73,-412 680.73,-412 680.73,-400 680.73,-400 680.73,-394 686.73,-388 692.73,-388 692.73,-388 754.76,-388 754.76,-388 760.76,-388 766.76,-394 766.76,-400 766.76,-400 766.76,-412 766.76,-412 766.76,-418 760.76,-424 754.76,-424"/>
<text xml:space="preserve" text-anchor="middle" x="723.74" y="-409" font-family="Helvetica,sans-Serif" font-size="10.00">ActorAddress</text>
<text xml:space="preserve" text-anchor="middle" x="723.74" y="-397" font-family="Helvetica,sans-Serif" font-size="10.00">::new_random()</text>
</g>
<!-- c_spawn&#45;&gt;c_addr -->
<g id="edge16" class="edge">
<title>c_spawn&#45;&gt;c_addr</title>
<path fill="none" stroke="#333333" d="M492.6,-406C539.12,-406 616.97,-406 669.07,-406"/>
<polygon fill="#333333" stroke="#333333" points="668.91,-409.5 678.91,-406 668.91,-402.5 668.91,-409.5"/>
</g>
<!-- c_place -->
<g id="node21" class="node">
<title>c_place</title>
<path fill="#e8daef" stroke="black" d="M1065.68,-428C1065.68,-428 1007,-428 1007,-428 1001,-428 995,-422 995,-416 995,-416 995,-396 995,-396 995,-390 1001,-384 1007,-384 1007,-384 1065.68,-384 1065.68,-384 1071.68,-384 1077.68,-390 1077.68,-396 1077.68,-396 1077.68,-416 1077.68,-416 1077.68,-422 1071.68,-428 1065.68,-428"/>
<text xml:space="preserve" text-anchor="middle" x="1036.34" y="-415" font-family="Helvetica,sans-Serif" font-size="10.00">Placement</text>
<text xml:space="preserve" text-anchor="middle" x="1036.34" y="-403" font-family="Helvetica,sans-Serif" font-size="10.00">::next_worker()</text>
<text xml:space="preserve" text-anchor="middle" x="1036.34" y="-391" font-family="Helvetica,sans-Serif" font-size="10.00">round&#45;robin</text>
</g>
<!-- c_addr&#45;&gt;c_place -->
<g id="edge17" class="edge">
<title>c_addr&#45;&gt;c_place</title>
<path fill="none" stroke="#333333" d="M766.96,-406C823.21,-406 922.69,-406 983.46,-406"/>
<polygon fill="#333333" stroke="#333333" points="983.19,-409.5 993.19,-406 983.19,-402.5 983.19,-409.5"/>
</g>
<!-- c_addrmap -->
<g id="node22" class="node">
<title>c_addrmap</title>
<path fill="#e8daef" stroke="black" d="M1360.16,-424C1360.16,-424 1290.91,-424 1290.91,-424 1284.91,-424 1278.91,-418 1278.91,-412 1278.91,-412 1278.91,-400 1278.91,-400 1278.91,-394 1284.91,-388 1290.91,-388 1290.91,-388 1360.16,-388 1360.16,-388 1366.16,-388 1372.16,-394 1372.16,-400 1372.16,-400 1372.16,-412 1372.16,-412 1372.16,-418 1366.16,-424 1360.16,-424"/>
<text xml:space="preserve" text-anchor="middle" x="1325.53" y="-409" font-family="Helvetica,sans-Serif" font-size="10.00">AddressMap</text>
<text xml:space="preserve" text-anchor="middle" x="1325.53" y="-397" font-family="Helvetica,sans-Serif" font-size="10.00">::insert(addr, wid)</text>
</g>
<!-- c_place&#45;&gt;c_addrmap -->
<g id="edge18" class="edge">
<title>c_place&#45;&gt;c_addrmap</title>
<path fill="none" stroke="#117864" d="M1077.88,-406C1127.25,-406 1210.96,-406 1266.99,-406"/>
<polygon fill="#117864" stroke="#117864" points="1266.99,-409.5 1276.99,-406 1266.99,-402.5 1266.99,-409.5"/>
<text xml:space="preserve" text-anchor="middle" x="1195.12" y="-408.7" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#117864">WorkerId</text>
</g>
<!-- c_box -->
<g id="node23" class="node">
<title>c_box</title>
<path fill="white" stroke="black" d="M1667.81,-424C1667.81,-424 1613.02,-424 1613.02,-424 1607.02,-424 1601.02,-418 1601.02,-412 1601.02,-412 1601.02,-400 1601.02,-400 1601.02,-394 1607.02,-388 1613.02,-388 1613.02,-388 1667.81,-388 1667.81,-388 1673.81,-388 1679.81,-394 1679.81,-400 1679.81,-400 1679.81,-412 1679.81,-412 1679.81,-418 1673.81,-424 1667.81,-424"/>
<text xml:space="preserve" text-anchor="middle" x="1640.42" y="-409" font-family="Helvetica,sans-Serif" font-size="10.00">Box::new(</text>
<text xml:space="preserve" text-anchor="middle" x="1640.42" y="-397" font-family="Helvetica,sans-Serif" font-size="10.00">Actor::new(a))</text>
</g>
<!-- c_addrmap&#45;&gt;c_box -->
<g id="edge19" class="edge">
<title>c_addrmap&#45;&gt;c_box</title>
<path fill="none" stroke="#333333" d="M1372.36,-406C1430.29,-406 1529.63,-406 1589.45,-406"/>
<polygon fill="#333333" stroke="#333333" points="1589.35,-409.5 1599.35,-406 1589.35,-402.5 1589.35,-409.5"/>
</g>
<!-- c_tx -->
<g id="node24" class="node">
<title>c_tx</title>
<path fill="#d1f2eb" stroke="black" d="M1987.39,-428C1987.39,-428 1946.49,-428 1946.49,-428 1940.49,-428 1934.49,-422 1934.49,-416 1934.49,-416 1934.49,-396 1934.49,-396 1934.49,-390 1940.49,-384 1946.49,-384 1946.49,-384 1987.39,-384 1987.39,-384 1993.39,-384 1999.39,-390 1999.39,-396 1999.39,-396 1999.39,-416 1999.39,-416 1999.39,-422 1993.39,-428 1987.39,-428"/>
<text xml:space="preserve" text-anchor="middle" x="1966.94" y="-415" font-family="Helvetica,sans-Serif" font-size="10.00">spawn_txs</text>
<text xml:space="preserve" text-anchor="middle" x="1966.94" y="-403" font-family="Helvetica,sans-Serif" font-size="10.00">[worker_id]</text>
<text xml:space="preserve" text-anchor="middle" x="1966.94" y="-391" font-family="Helvetica,sans-Serif" font-size="10.00">.try_send()</text>
</g>
<!-- c_box&#45;&gt;c_tx -->
<g id="edge20" class="edge">
<title>c_box&#45;&gt;c_tx</title>
<path fill="none" stroke="#27ae60" stroke-width="2" d="M1680.24,-406C1740.87,-406 1857.68,-406 1921.56,-406"/>
<polygon fill="#27ae60" stroke="#27ae60" stroke-width="2" points="1921.32,-409.5 1931.32,-406 1921.32,-402.5 1921.32,-409.5"/>
<text xml:space="preserve" text-anchor="middle" x="1805.63" y="-408.7" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#27ae60">(addr, actor_box)</text>
</g>
<!-- c_hybrid -->
<g id="node25" class="node">
<title>c_hybrid</title>
<path fill="#d1f2eb" stroke="black" d="M2260.18,-420.73C2260.18,-422.53 2241.77,-424 2219.1,-424 2196.44,-424 2178.03,-422.53 2178.03,-420.73 2178.03,-420.73 2178.03,-391.27 2178.03,-391.27 2178.03,-389.47 2196.44,-388 2219.1,-388 2241.77,-388 2260.18,-389.47 2260.18,-391.27 2260.18,-391.27 2260.18,-420.73 2260.18,-420.73"/>
<path fill="none" stroke="black" d="M2260.18,-420.73C2260.18,-418.92 2241.77,-417.45 2219.1,-417.45 2196.44,-417.45 2178.03,-418.92 2178.03,-420.73"/>
<text xml:space="preserve" text-anchor="middle" x="2219.1" y="-403" font-family="Helvetica,sans-Serif" font-size="10.00">HybridChannel</text>
</g>
<!-- c_tx&#45;&gt;c_hybrid -->
<g id="edge21" class="edge">
<title>c_tx&#45;&gt;c_hybrid</title>
<path fill="none" stroke="#27ae60" stroke-width="2" d="M1999.88,-406C2041.47,-406 2114.77,-406 2164.84,-406"/>
<polygon fill="#27ae60" stroke="#27ae60" stroke-width="2" points="2164.65,-409.5 2174.65,-406 2164.65,-402.5 2164.65,-409.5"/>
<text xml:space="preserve" text-anchor="middle" x="2125.01" y="-408.7" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#27ae60">spawn tuple</text>
</g>
<!-- c_rx -->
<g id="node26" class="node">
<title>c_rx</title>
<path fill="#fadbd8" stroke="black" d="M2407.61,-428C2407.61,-428 2370.61,-428 2370.61,-428 2364.61,-428 2358.61,-422 2358.61,-416 2358.61,-416 2358.61,-396 2358.61,-396 2358.61,-390 2364.61,-384 2370.61,-384 2370.61,-384 2407.61,-384 2407.61,-384 2413.61,-384 2419.61,-390 2419.61,-396 2419.61,-396 2419.61,-416 2419.61,-416 2419.61,-422 2413.61,-428 2407.61,-428"/>
<text xml:space="preserve" text-anchor="middle" x="2389.11" y="-415" font-family="Helvetica,sans-Serif" font-size="10.00">Worker</text>
<text xml:space="preserve" text-anchor="middle" x="2389.11" y="-403" font-family="Helvetica,sans-Serif" font-size="10.00">spawn_rx</text>
<text xml:space="preserve" text-anchor="middle" x="2389.11" y="-391" font-family="Helvetica,sans-Serif" font-size="10.00">.try_recv()</text>
</g>
<!-- c_hybrid&#45;&gt;c_rx -->
<g id="edge22" class="edge">
<title>c_hybrid&#45;&gt;c_rx</title>
<path fill="none" stroke="#27ae60" stroke-width="2" d="M2260.35,-406C2285.97,-406 2319.14,-406 2345.26,-406"/>
<polygon fill="#27ae60" stroke="#27ae60" stroke-width="2" points="2345.17,-409.5 2355.17,-406 2345.17,-402.5 2345.17,-409.5"/>
<text xml:space="preserve" text-anchor="middle" x="2306.19" y="-408.7" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#27ae60">spawn tuple</text>
</g>
<!-- c_pool -->
<g id="node27" class="node">
<title>c_pool</title>
<path fill="#fadbd8" stroke="black" d="M2598.68,-428C2598.68,-428 2550.55,-428 2550.55,-428 2544.55,-428 2538.55,-422 2538.55,-416 2538.55,-416 2538.55,-396 2538.55,-396 2538.55,-390 2544.55,-384 2550.55,-384 2550.55,-384 2598.68,-384 2598.68,-384 2604.68,-384 2610.68,-390 2610.68,-396 2610.68,-396 2610.68,-416 2610.68,-416 2610.68,-422 2604.68,-428 2598.68,-428"/>
<text xml:space="preserve" text-anchor="middle" x="2574.62" y="-415" font-family="Helvetica,sans-Serif" font-size="10.00">ActorPool</text>
<text xml:space="preserve" text-anchor="middle" x="2574.62" y="-403" font-family="Helvetica,sans-Serif" font-size="10.00">::insert(addr,</text>
<text xml:space="preserve" text-anchor="middle" x="2574.62" y="-391" font-family="Helvetica,sans-Serif" font-size="10.00">actor_box)</text>
</g>
<!-- c_rx&#45;&gt;c_pool -->
<g id="edge23" class="edge">
<title>c_rx&#45;&gt;c_pool</title>
<path fill="none" stroke="#27ae60" stroke-width="2" d="M2420.01,-406C2448.52,-406 2491.94,-406 2525.36,-406"/>
<polygon fill="#27ae60" stroke="#27ae60" stroke-width="2" points="2525.05,-409.5 2535.05,-406 2525.05,-402.5 2525.05,-409.5"/>
<text xml:space="preserve" text-anchor="middle" x="2482.28" y="-408.7" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#27ae60">(addr, actor_box)</text>
</g>
<!-- d_caller -->
<g id="node28" class="node">
<title>d_caller</title>
<ellipse fill="#a3e4d7" stroke="black" cx="135.72" cy="-522" rx="27" ry="18"/>
<text xml:space="preserve" text-anchor="middle" x="135.72" y="-519" font-family="Helvetica,sans-Serif" font-size="10.00">Caller</text>
</g>
<!-- d_new -->
<g id="node29" class="node">
<title>d_new</title>
<path fill="white" stroke="black" d="M491.24,-540C491.24,-540 413.64,-540 413.64,-540 407.64,-540 401.64,-534 401.64,-528 401.64,-528 401.64,-516 401.64,-516 401.64,-510 407.64,-504 413.64,-504 413.64,-504 491.24,-504 491.24,-504 497.24,-504 503.24,-510 503.24,-516 503.24,-516 503.24,-528 503.24,-528 503.24,-534 497.24,-540 491.24,-540"/>
<text xml:space="preserve" text-anchor="middle" x="452.44" y="-525" font-family="Helvetica,sans-Serif" font-size="10.00">Runtime</text>
<text xml:space="preserve" text-anchor="middle" x="452.44" y="-513" font-family="Helvetica,sans-Serif" font-size="10.00">::new_inbox::&lt;M&gt;()</text>
</g>
<!-- d_caller&#45;&gt;d_new -->
<g id="edge24" class="edge">
<title>d_caller&#45;&gt;d_new</title>
<path fill="none" stroke="#333333" d="M163.01,-522C212.62,-522 321.23,-522 390.1,-522"/>
<polygon fill="#333333" stroke="#333333" points="389.71,-525.5 399.71,-522 389.71,-518.5 389.71,-525.5"/>
</g>
<!-- d_addr -->
<g id="node30" class="node">
<title>d_addr</title>
<path fill="#d5f5e3" stroke="black" d="M754.76,-540C754.76,-540 692.73,-540 692.73,-540 686.73,-540 680.73,-534 680.73,-528 680.73,-528 680.73,-516 680.73,-516 680.73,-510 686.73,-504 692.73,-504 692.73,-504 754.76,-504 754.76,-504 760.76,-504 766.76,-510 766.76,-516 766.76,-516 766.76,-528 766.76,-528 766.76,-534 760.76,-540 754.76,-540"/>
<text xml:space="preserve" text-anchor="middle" x="723.74" y="-525" font-family="Helvetica,sans-Serif" font-size="10.00">ActorAddress</text>
<text xml:space="preserve" text-anchor="middle" x="723.74" y="-513" font-family="Helvetica,sans-Serif" font-size="10.00">::new_random()</text>
</g>
<!-- d_new&#45;&gt;d_addr -->
<g id="edge25" class="edge">
<title>d_new&#45;&gt;d_addr</title>
<path fill="none" stroke="#333333" d="M503.46,-522C550.54,-522 620.82,-522 669.06,-522"/>
<polygon fill="#333333" stroke="#333333" points="669,-525.5 679,-522 669,-518.5 669,-525.5"/>
</g>
<!-- d_recv -->
<g id="node31" class="node">
<title>d_recv</title>
<path fill="#d1f2eb" stroke="black" d="M1065.96,-540C1065.96,-540 1006.72,-540 1006.72,-540 1000.72,-540 994.72,-534 994.72,-528 994.72,-528 994.72,-516 994.72,-516 994.72,-510 1000.72,-504 1006.72,-504 1006.72,-504 1065.96,-504 1065.96,-504 1071.96,-504 1077.96,-510 1077.96,-516 1077.96,-516 1077.96,-528 1077.96,-528 1077.96,-534 1071.96,-540 1065.96,-540"/>
<text xml:space="preserve" text-anchor="middle" x="1036.34" y="-525" font-family="Helvetica,sans-Serif" font-size="10.00">Receiver&lt;M&gt;</text>
<text xml:space="preserve" text-anchor="middle" x="1036.34" y="-513" font-family="Helvetica,sans-Serif" font-size="10.00">::new(capacity)</text>
</g>
<!-- d_addr&#45;&gt;d_recv -->
<g id="edge26" class="edge">
<title>d_addr&#45;&gt;d_recv</title>
<path fill="none" stroke="#333333" d="M766.96,-522C823.21,-522 922.69,-522 983.46,-522"/>
<polygon fill="#333333" stroke="#333333" points="983.19,-525.5 993.19,-522 983.19,-518.5 983.19,-525.5"/>
</g>
<!-- d_sender -->
<g id="node32" class="node">
<title>d_sender</title>
<path fill="#d1f2eb" stroke="black" d="M1367.25,-510C1367.25,-510 1283.82,-510 1283.82,-510 1277.82,-510 1271.82,-504 1271.82,-498 1271.82,-498 1271.82,-486 1271.82,-486 1271.82,-480 1277.82,-474 1283.82,-474 1283.82,-474 1367.25,-474 1367.25,-474 1373.25,-474 1379.25,-480 1379.25,-486 1379.25,-486 1379.25,-498 1379.25,-498 1379.25,-504 1373.25,-510 1367.25,-510"/>
<text xml:space="preserve" text-anchor="middle" x="1325.53" y="-495" font-family="Helvetica,sans-Serif" font-size="10.00">Sender&lt;M&gt;</text>
<text xml:space="preserve" text-anchor="middle" x="1325.53" y="-483" font-family="Helvetica,sans-Serif" font-size="10.00">= recv.new_sender()</text>
</g>
<!-- d_recv&#45;&gt;d_sender -->
<g id="edge27" class="edge">
<title>d_recv&#45;&gt;d_sender</title>
<path fill="none" stroke="#e67300" d="M1078.31,-516.99C1105.24,-513.76 1141.25,-509.55 1173.11,-506.2 1201.72,-503.19 1233.4,-500.18 1260.35,-497.7"/>
<polygon fill="#e67300" stroke="#e67300" points="1260.45,-501.2 1270.09,-496.81 1259.81,-494.23 1260.45,-501.2"/>
<text xml:space="preserve" text-anchor="middle" x="1195.12" y="-508.9" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#e67300">clone Arc</text>
</g>
<!-- d_inbox -->
<g id="node34" class="node">
<title>d_inbox</title>
<path fill="#d6eaf8" stroke="black" d="M1357.66,-576C1357.66,-576 1293.4,-576 1293.4,-576 1287.4,-576 1281.4,-570 1281.4,-564 1281.4,-564 1281.4,-544 1281.4,-544 1281.4,-538 1287.4,-532 1293.4,-532 1293.4,-532 1357.66,-532 1357.66,-532 1363.66,-532 1369.66,-538 1369.66,-544 1369.66,-544 1369.66,-564 1369.66,-564 1369.66,-570 1363.66,-576 1357.66,-576"/>
<text xml:space="preserve" text-anchor="middle" x="1325.53" y="-563" font-family="Helvetica,sans-Serif" font-size="10.00">return Inbox {</text>
<text xml:space="preserve" text-anchor="middle" x="1325.53" y="-551" font-family="Helvetica,sans-Serif" font-size="10.00">addr, inner: recv</text>
<text xml:space="preserve" text-anchor="middle" x="1325.53" y="-539" font-family="Helvetica,sans-Serif" font-size="10.00">}</text>
</g>
<!-- d_recv&#45;&gt;d_inbox -->
<g id="edge29" class="edge">
<title>d_recv&#45;&gt;d_inbox</title>
<path fill="none" stroke="#333333" d="M1078.18,-526.55C1128.46,-532.15 1214.02,-541.69 1269.9,-547.91"/>
<polygon fill="#333333" stroke="#333333" points="1269.18,-551.35 1279.51,-548.98 1269.96,-544.4 1269.18,-551.35"/>
<text xml:space="preserve" text-anchor="middle" x="1195.12" y="-544.51" font-family="Helvetica,sans-Serif" font-size="9.00">Receiver</text>
</g>
<!-- d_reg -->
<g id="node33" class="node">
<title>d_reg</title>
<path fill="#e8daef" stroke="black" d="M1679.49,-518C1679.49,-518 1601.34,-518 1601.34,-518 1595.34,-518 1589.34,-512 1589.34,-506 1589.34,-506 1589.34,-486 1589.34,-486 1589.34,-480 1595.34,-474 1601.34,-474 1601.34,-474 1679.49,-474 1679.49,-474 1685.49,-474 1691.49,-480 1691.49,-486 1691.49,-486 1691.49,-506 1691.49,-506 1691.49,-512 1685.49,-518 1679.49,-518"/>
<text xml:space="preserve" text-anchor="middle" x="1640.42" y="-505" font-family="Helvetica,sans-Serif" font-size="10.00">InboxRegistry</text>
<text xml:space="preserve" text-anchor="middle" x="1640.42" y="-493" font-family="Helvetica,sans-Serif" font-size="10.00">::register(</text>
<text xml:space="preserve" text-anchor="middle" x="1640.42" y="-481" font-family="Helvetica,sans-Serif" font-size="10.00">addr, Arc&lt;sender&gt;)</text>
</g>
<!-- d_sender&#45;&gt;d_reg -->
<g id="edge28" class="edge">
<title>d_sender&#45;&gt;d_reg</title>
<path fill="none" stroke="#e67300" d="M1379.61,-492.68C1434.45,-493.38 1519.96,-494.47 1577.76,-495.21"/>
<polygon fill="#e67300" stroke="#e67300" points="1577.38,-498.71 1587.42,-495.34 1577.46,-491.71 1577.38,-498.71"/>
<text xml:space="preserve" text-anchor="middle" x="1471.7" y="-496.94" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#e67300">Arc&lt;dyn SenderT&gt;</text>
</g>
<!-- d_send -->
<g id="node35" class="node">
<title>d_send</title>
<path fill="white" stroke="black" d="M170.35,-634C170.35,-634 101.09,-634 101.09,-634 95.09,-634 89.09,-628 89.09,-622 89.09,-622 89.09,-602 89.09,-602 89.09,-596 95.09,-590 101.09,-590 101.09,-590 170.35,-590 170.35,-590 176.35,-590 182.35,-596 182.35,-602 182.35,-602 182.35,-622 182.35,-622 182.35,-628 176.35,-634 170.35,-634"/>
<text xml:space="preserve" text-anchor="middle" x="135.72" y="-621" font-family="Helvetica,sans-Serif" font-size="10.00">Runtime</text>
<text xml:space="preserve" text-anchor="middle" x="135.72" y="-609" font-family="Helvetica,sans-Serif" font-size="10.00">::send_to(</text>
<text xml:space="preserve" text-anchor="middle" x="135.72" y="-597" font-family="Helvetica,sans-Serif" font-size="10.00">inbox_addr, msg)</text>
</g>
<!-- d_miss -->
<g id="node36" class="node">
<title>d_miss</title>
<path fill="#e8daef" stroke="black" d="M483.17,-630C483.17,-630 421.71,-630 421.71,-630 415.71,-630 409.71,-624 409.71,-618 409.71,-618 409.71,-606 409.71,-606 409.71,-600 415.71,-594 421.71,-594 421.71,-594 483.17,-594 483.17,-594 489.17,-594 495.17,-600 495.17,-606 495.17,-606 495.17,-618 495.17,-618 495.17,-624 489.17,-630 483.17,-630"/>
<text xml:space="preserve" text-anchor="middle" x="452.44" y="-615" font-family="Helvetica,sans-Serif" font-size="10.00">AddressMap</text>
<text xml:space="preserve" text-anchor="middle" x="452.44" y="-603" font-family="Helvetica,sans-Serif" font-size="10.00">::lookup → miss</text>
</g>
<!-- d_send&#45;&gt;d_miss -->
<g id="edge30" class="edge">
<title>d_send&#45;&gt;d_miss</title>
<path fill="none" stroke="#333333" d="M182.82,-612C240.08,-612 337.59,-612 398.04,-612"/>
<polygon fill="#333333" stroke="#333333" points="397.74,-615.5 407.74,-612 397.74,-608.5 397.74,-615.5"/>
</g>
<!-- d_try -->
<g id="node37" class="node">
<title>d_try</title>
<path fill="#e8daef" stroke="black" d="M755.59,-634C755.59,-634 691.9,-634 691.9,-634 685.9,-634 679.9,-628 679.9,-622 679.9,-622 679.9,-602 679.9,-602 679.9,-596 685.9,-590 691.9,-590 691.9,-590 755.59,-590 755.59,-590 761.59,-590 767.59,-596 767.59,-602 767.59,-602 767.59,-622 767.59,-622 767.59,-628 761.59,-634 755.59,-634"/>
<text xml:space="preserve" text-anchor="middle" x="723.74" y="-621" font-family="Helvetica,sans-Serif" font-size="10.00">InboxRegistry</text>
<text xml:space="preserve" text-anchor="middle" x="723.74" y="-609" font-family="Helvetica,sans-Serif" font-size="10.00">::try_deliver(</text>
<text xml:space="preserve" text-anchor="middle" x="723.74" y="-597" font-family="Helvetica,sans-Serif" font-size="10.00">addr, Box(msg))</text>
</g>
<!-- d_miss&#45;&gt;d_try -->
<g id="edge31" class="edge">
<title>d_miss&#45;&gt;d_try</title>
<path fill="none" stroke="#333333" d="M495.52,-612C542.04,-612 617.15,-612 668.17,-612"/>
<polygon fill="#333333" stroke="#333333" points="668.11,-615.5 678.11,-612 668.11,-608.5 668.11,-615.5"/>
<text xml:space="preserve" text-anchor="middle" x="583.92" y="-625.5" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#666666">not a worker</text>
<text xml:space="preserve" text-anchor="middle" x="583.92" y="-614.7" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#666666">actor</text>
</g>
<!-- d_dyn -->
<g id="node38" class="node">
<title>d_dyn</title>
<path fill="#d1f2eb" stroke="black" d="M1086.54,-634C1086.54,-634 986.14,-634 986.14,-634 980.14,-634 974.14,-628 974.14,-622 974.14,-622 974.14,-602 974.14,-602 974.14,-596 980.14,-590 986.14,-590 986.14,-590 1086.54,-590 1086.54,-590 1092.54,-590 1098.54,-596 1098.54,-602 1098.54,-602 1098.54,-622 1098.54,-622 1098.54,-628 1092.54,-634 1086.54,-634"/>
<text xml:space="preserve" text-anchor="middle" x="1036.34" y="-621" font-family="Helvetica,sans-Serif" font-size="10.00">Arc&lt;dyn SenderT&gt;</text>
<text xml:space="preserve" text-anchor="middle" x="1036.34" y="-609" font-family="Helvetica,sans-Serif" font-size="10.00">::try_send_any()</text>
<text xml:space="preserve" text-anchor="middle" x="1036.34" y="-597" font-family="Helvetica,sans-Serif" font-size="10.00">downcast → Sender&lt;M&gt;</text>
</g>
<!-- d_try&#45;&gt;d_dyn -->
<g id="edge32" class="edge">
<title>d_try&#45;&gt;d_dyn</title>
<path fill="none" stroke="#8e44ad" stroke-width="1.5" d="M767.93,-612C817.99,-612 901.32,-612 961.67,-612"/>
<polygon fill="#8e44ad" stroke="#8e44ad" stroke-width="1.5" points="961.53,-615.5 971.53,-612 961.53,-608.5 961.53,-615.5"/>
<text xml:space="preserve" text-anchor="middle" x="869.07" y="-614.7" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#8e44ad">Box&lt;dyn Any&gt;</text>
</g>
<!-- d_hybrid -->
<g id="node39" class="node">
<title>d_hybrid</title>
<path fill="#d1f2eb" stroke="black" d="M1366.61,-630.73C1366.61,-632.53 1348.2,-634 1325.53,-634 1302.87,-634 1284.46,-632.53 1284.46,-630.73 1284.46,-630.73 1284.46,-601.27 1284.46,-601.27 1284.46,-599.47 1302.87,-598 1325.53,-598 1348.2,-598 1366.61,-599.47 1366.61,-601.27 1366.61,-601.27 1366.61,-630.73 1366.61,-630.73"/>
<path fill="none" stroke="black" d="M1366.61,-630.73C1366.61,-628.92 1348.2,-627.45 1325.53,-627.45 1302.87,-627.45 1284.46,-628.92 1284.46,-630.73"/>
<text xml:space="preserve" text-anchor="middle" x="1325.53" y="-613" font-family="Helvetica,sans-Serif" font-size="10.00">HybridChannel</text>
</g>
<!-- d_dyn&#45;&gt;d_hybrid -->
<g id="edge33" class="edge">
<title>d_dyn&#45;&gt;d_hybrid</title>
<path fill="none" stroke="#c0392b" stroke-width="1.5" d="M1098.95,-612.86C1150.5,-613.58 1223.25,-614.59 1272.06,-615.27"/>
<polygon fill="#c0392b" stroke="#c0392b" stroke-width="1.5" points="1271.92,-618.77 1281.97,-615.41 1272.02,-611.77 1271.92,-618.77"/>
<text xml:space="preserve" text-anchor="middle" x="1195.12" y="-617.18" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#c0392b">M (typed)</text>
</g>
<!-- d_tryrecv -->
<g id="node40" class="node">
<title>d_tryrecv</title>
<path fill="#d6eaf8" stroke="black" d="M1660.31,-634C1660.31,-634 1620.53,-634 1620.53,-634 1614.53,-634 1608.53,-628 1608.53,-622 1608.53,-622 1608.53,-610 1608.53,-610 1608.53,-604 1614.53,-598 1620.53,-598 1620.53,-598 1660.31,-598 1660.31,-598 1666.31,-598 1672.31,-604 1672.31,-610 1672.31,-610 1672.31,-622 1672.31,-622 1672.31,-628 1666.31,-634 1660.31,-634"/>
<text xml:space="preserve" text-anchor="middle" x="1640.42" y="-619" font-family="Helvetica,sans-Serif" font-size="10.00">Inbox</text>
<text xml:space="preserve" text-anchor="middle" x="1640.42" y="-607" font-family="Helvetica,sans-Serif" font-size="10.00">::try_recv()</text>
</g>
<!-- d_hybrid&#45;&gt;d_tryrecv -->
<g id="edge34" class="edge">
<title>d_hybrid&#45;&gt;d_tryrecv</title>
<path fill="none" stroke="#c0392b" stroke-width="1.5" d="M1366.8,-616C1425.81,-616 1535.36,-616 1596.08,-616"/>
<polygon fill="#c0392b" stroke="#c0392b" stroke-width="1.5" points="1595.99,-619.5 1605.99,-616 1595.99,-612.5 1595.99,-619.5"/>
<text xml:space="preserve" text-anchor="middle" x="1471.7" y="-618.7" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#c0392b">M</text>
</g>
<!-- e_phase1 -->
<g id="node41" class="node">
<title>e_phase1</title>
<polygon fill="#27ae60" stroke="none" points="375.97,-887 375.97,-913 528.91,-913 528.91,-887 375.97,-887"/>
<polygon fill="none" stroke="black" points="375.97,-887 375.97,-913 528.91,-913 528.91,-887 375.97,-887"/>
<text xml:space="preserve" text-anchor="start" x="433.54" y="-898" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="10.00" fill="white">Phase 1</text>
<polygon fill="none" stroke="black" points="375.97,-833 375.97,-887 528.91,-887 528.91,-833 375.97,-833"/>
<text xml:space="preserve" text-anchor="start" x="397.99" y="-872" font-family="Helvetica,sans-Serif" font-size="10.00">DRAIN SPAWN QUEUE</text>
<text xml:space="preserve" text-anchor="start" x="408.54" y="-862" font-family="Helvetica,sans-Serif" font-size="10.00">spawn_rx.try_recv()</text>
<text xml:space="preserve" text-anchor="start" x="382.97" y="-852" font-family="Helvetica,sans-Serif" font-size="10.00">→ ActorPool::insert(addr, actor)</text>
<text xml:space="preserve" text-anchor="start" x="412.7" y="-842" font-family="Helvetica,sans-Serif" font-style="italic" font-size="10.00">repeat until empty</text>
</g>
<!-- e_phase2 -->
<g id="node42" class="node">
<title>e_phase2</title>
<polygon fill="#c0392b" stroke="none" points="638.93,-852 638.93,-878 808.56,-878 808.56,-852 638.93,-852"/>
<polygon fill="none" stroke="black" points="638.93,-852 638.93,-878 808.56,-878 808.56,-852 638.93,-852"/>
<text xml:space="preserve" text-anchor="start" x="704.84" y="-863" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="10.00" fill="white">Phase 2</text>
<polygon fill="none" stroke="black" points="638.93,-798 638.93,-852 808.56,-852 808.56,-798 638.93,-798"/>
<text xml:space="preserve" text-anchor="start" x="660.68" y="-837" font-family="Helvetica,sans-Serif" font-size="10.00">DRAIN TRANSFER QUEUE</text>
<text xml:space="preserve" text-anchor="start" x="649.55" y="-827" font-family="Helvetica,sans-Serif" font-size="10.00">transfer_rx.try_recv() → Envelope</text>
<text xml:space="preserve" text-anchor="start" x="645.93" y="-817" font-family="Helvetica,sans-Serif" font-size="10.00">→ ActorPool::deliver(dest, payload)</text>
<text xml:space="preserve" text-anchor="start" x="662.04" y="-807" font-family="Helvetica,sans-Serif" font-style="italic" font-size="10.00">repeat up to max(len&gt;&gt;1, 1)</text>
</g>
<!-- e_phase1&#45;&gt;e_phase2 -->
<g id="edge35" class="edge">
<title>e_phase1&#45;&gt;e_phase2</title>
<path fill="none" stroke="#333333" stroke-width="2" d="M536.81,-862.17C562.68,-858.8 591.52,-855.05 618.62,-851.53"/>
<polygon fill="#333333" stroke="#333333" stroke-width="2" points="618.88,-855.03 628.34,-850.27 617.97,-848.09 618.88,-855.03"/>
</g>
<!-- e_pool -->
<g id="node49" class="node">
<title>e_pool</title>
<polygon fill="#fadbd8" stroke="black" points="2012.88,-870 1925.01,-870 1921.01,-866 1921.01,-826 2008.88,-826 2012.88,-830 2012.88,-870"/>
<polyline fill="none" stroke="black" points="2008.88,-866 1921.01,-866"/>
<polyline fill="none" stroke="black" points="2008.88,-866 2008.88,-826"/>
<polyline fill="none" stroke="black" points="2008.88,-866 2012.88,-870"/>
<text xml:space="preserve" text-anchor="middle" x="1966.94" y="-857" font-family="Helvetica,sans-Serif" font-size="10.00">ActorPool</text>
<text xml:space="preserve" text-anchor="middle" x="1966.94" y="-845" font-family="Helvetica,sans-Serif" font-size="10.00">(HashMap&lt;Addr,</text>
<text xml:space="preserve" text-anchor="middle" x="1966.94" y="-833" font-family="Helvetica,sans-Serif" font-size="10.00">ActorSlot&gt;)</text>
</g>
<!-- e_phase1&#45;&gt;e_pool -->
<g id="edge42" class="edge">
<title>e_phase1&#45;&gt;e_pool</title>
<path fill="none" stroke="#27ae60" stroke-dasharray="5,2" d="M536.82,-884C566.47,-887.49 600.14,-890.97 630.93,-893 1126.95,-925.77 1254.73,-931.59 1749.36,-882 1804.11,-876.51 1866.1,-866.38 1909.69,-858.6"/>
<polygon fill="#27ae60" stroke="#27ae60" points="1910.21,-862.06 1919.43,-856.84 1908.96,-855.17 1910.21,-862.06"/>
<text xml:space="preserve" text-anchor="middle" x="1195.12" y="-921.11" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#27ae60">insert</text>
</g>
<!-- e_phase3 -->
<g id="node43" class="node">
<title>e_phase3</title>
<polygon fill="#8e44ad" stroke="none" points="929.57,-833 929.57,-859 1143.11,-859 1143.11,-833 929.57,-833"/>
<polygon fill="none" stroke="black" points="929.57,-833 929.57,-859 1143.11,-859 1143.11,-833 929.57,-833"/>
<text xml:space="preserve" text-anchor="start" x="1017.44" y="-844" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="10.00" fill="white">Phase 3</text>
<polygon fill="none" stroke="black" points="929.57,-769 929.57,-833 1143.11,-833 1143.11,-769 929.57,-769"/>
<text xml:space="preserve" text-anchor="start" x="992.44" y="-818" font-family="Helvetica,sans-Serif" font-size="10.00">TICK ALL ACTORS</text>
<text xml:space="preserve" text-anchor="start" x="987.71" y="-808" font-family="Helvetica,sans-Serif" font-size="10.00">for (addr, slot) in pool:</text>
<text xml:space="preserve" text-anchor="start" x="961.17" y="-798" font-family="Helvetica,sans-Serif" font-size="10.00"> &#160;while msg = mailbox.pop_front():</text>
<text xml:space="preserve" text-anchor="start" x="936.57" y="-788" font-family="Helvetica,sans-Serif" font-size="10.00"> &#160;&#160;&#160;catch_unwind(actor.handle_any(ctx, msg))</text>
<text xml:space="preserve" text-anchor="start" x="956.59" y="-778" font-family="Helvetica,sans-Serif" font-style="italic" font-size="10.00">actors may call ctx.send / ctx.spawn</text>
</g>
<!-- e_phase2&#45;&gt;e_phase3 -->
<g id="edge36" class="edge">
<title>e_phase2&#45;&gt;e_phase3</title>
<path fill="none" stroke="#333333" stroke-width="2" d="M816.25,-830.93C845.27,-828.69 877.88,-826.17 908.9,-823.77"/>
<polygon fill="#333333" stroke="#333333" stroke-width="2" points="908.9,-827.28 918.6,-823.02 908.36,-820.3 908.9,-827.28"/>
</g>
<!-- e_phase2&#45;&gt;e_pool -->
<g id="edge43" class="edge">
<title>e_phase2&#45;&gt;e_pool</title>
<path fill="none" stroke="#c0392b" stroke-dasharray="5,2" d="M816.42,-858.09C849.4,-864.44 887,-870.66 921.57,-874 1297.37,-910.3 1752.56,-870.38 1909.54,-854.19"/>
<polygon fill="#c0392b" stroke="#c0392b" points="1909.67,-857.69 1919.25,-853.17 1908.94,-850.73 1909.67,-857.69"/>
<text xml:space="preserve" text-anchor="middle" x="1325.53" y="-891.49" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#c0392b">deliver</text>
</g>
<!-- e_phase4 -->
<g id="node44" class="node">
<title>e_phase4</title>
<polygon fill="#27ae60" stroke="none" points="1247.13,-737 1247.13,-763 1403.93,-763 1403.93,-737 1247.13,-737"/>
<polygon fill="none" stroke="black" points="1247.13,-737 1247.13,-763 1403.93,-763 1403.93,-737 1247.13,-737"/>
<text xml:space="preserve" text-anchor="start" x="1306.63" y="-748" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="10.00" fill="white">Phase 4</text>
<polygon fill="none" stroke="black" points="1247.13,-683 1247.13,-737 1403.93,-737 1403.93,-683 1247.13,-683"/>
<text xml:space="preserve" text-anchor="start" x="1254.13" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">DRAIN SPAWN QUEUE AGAIN</text>
<text xml:space="preserve" text-anchor="start" x="1254.95" y="-712" font-family="Helvetica,sans-Serif" font-style="italic" font-size="10.00">(picks up spawns from phase 3)</text>
<text xml:space="preserve" text-anchor="start" x="1281.63" y="-702" font-family="Helvetica,sans-Serif" font-size="10.00">spawn_rx.try_recv()</text>
<text xml:space="preserve" text-anchor="start" x="1279.96" y="-692" font-family="Helvetica,sans-Serif" font-size="10.00">→ ActorPool::insert()</text>
</g>
<!-- e_phase3&#45;&gt;e_phase4 -->
<g id="edge37" class="edge">
<title>e_phase3&#45;&gt;e_phase4</title>
<path fill="none" stroke="#333333" stroke-width="2" d="M1150.85,-778.03C1176.06,-770.04 1202.57,-761.64 1227.08,-753.88"/>
<polygon fill="#333333" stroke="#333333" stroke-width="2" points="1227.95,-757.27 1236.43,-750.92 1225.84,-750.6 1227.95,-757.27"/>
</g>
<!-- e_spawn_rx -->
<g id="node47" class="node">
<title>e_spawn_rx</title>
<path fill="#d1f2eb" stroke="black" d="M180.12,-765C180.12,-767.21 160.22,-769 135.72,-769 111.22,-769 91.31,-767.21 91.31,-765 91.31,-765 91.31,-729 91.31,-729 91.31,-726.79 111.22,-725 135.72,-725 160.22,-725 180.12,-726.79 180.12,-729 180.12,-729 180.12,-765 180.12,-765"/>
<path fill="none" stroke="black" d="M180.12,-765C180.12,-762.79 160.22,-761 135.72,-761 111.22,-761 91.31,-762.79 91.31,-765"/>
<text xml:space="preserve" text-anchor="middle" x="135.72" y="-750" font-family="Helvetica,sans-Serif" font-size="10.00">spawn_rx</text>
<text xml:space="preserve" text-anchor="middle" x="135.72" y="-738" font-family="Helvetica,sans-Serif" font-size="10.00">(HybridChannel)</text>
</g>
<!-- e_phase3&#45;&gt;e_spawn_rx -->
<g id="edge46" class="edge">
<title>e_phase3&#45;&gt;e_spawn_rx</title>
<path fill="none" stroke="#27ae60" stroke-dasharray="5,2" d="M958.11,-765.07C917.63,-742.28 866.25,-717.67 816.56,-706 589.3,-652.62 308.24,-705.96 191.51,-733.16"/>
<polygon fill="#27ae60" stroke="#27ae60" points="190.81,-729.73 181.88,-735.44 192.42,-736.54 190.81,-729.73"/>
<text xml:space="preserve" text-anchor="middle" x="583.92" y="-697.12" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#27ae60">ctx.spawn →</text>
<text xml:space="preserve" text-anchor="middle" x="583.92" y="-686.32" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#27ae60">spawn_txs</text>
</g>
<!-- e_phase3&#45;&gt;e_pool -->
<g id="edge44" class="edge">
<title>e_phase3&#45;&gt;e_pool</title>
<path fill="none" stroke="#8e44ad" stroke-dasharray="5,2" d="M1162.09,-835.89C1165.8,-836.3 1169.48,-836.67 1173.11,-837 1448.24,-862.06 1779.25,-854.59 1909.44,-850.19"/>
<polygon fill="#8e44ad" stroke="#8e44ad" points="1162.73,-832.44 1152.39,-834.74 1161.91,-839.39 1162.73,-832.44"/>
<polygon fill="#8e44ad" stroke="#8e44ad" points="1909.29,-853.7 1919.16,-849.85 1909.04,-846.7 1909.29,-853.7"/>
<text xml:space="preserve" text-anchor="middle" x="1471.7" y="-867.13" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#8e44ad">pop mailbox +</text>
<text xml:space="preserve" text-anchor="middle" x="1471.7" y="-856.33" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#8e44ad">handle_any</text>
</g>
<!-- e_pending -->
<g id="node50" class="node">
<title>e_pending</title>
<path fill="#d6eaf8" stroke="black" d="M1355.71,-825C1355.71,-825 1295.35,-825 1295.35,-825 1289.35,-825 1283.35,-819 1283.35,-813 1283.35,-813 1283.35,-801 1283.35,-801 1283.35,-795 1289.35,-789 1295.35,-789 1295.35,-789 1355.71,-789 1355.71,-789 1361.71,-789 1367.71,-795 1367.71,-801 1367.71,-801 1367.71,-813 1367.71,-813 1367.71,-819 1361.71,-825 1355.71,-825"/>
<text xml:space="preserve" text-anchor="middle" x="1325.53" y="-810" font-family="Helvetica,sans-Serif" font-size="10.00">pending_local</text>
<text xml:space="preserve" text-anchor="middle" x="1325.53" y="-798" font-family="Helvetica,sans-Serif" font-size="10.00">(RefCell&lt;Vec&gt;)</text>
</g>
<!-- e_phase3&#45;&gt;e_pending -->
<g id="edge45" class="edge">
<title>e_phase3&#45;&gt;e_pending</title>
<path fill="none" stroke="#2980b9" stroke-dasharray="5,2" d="M1150.85,-811.23C1192.5,-810.22 1237.69,-809.12 1271.53,-808.29"/>
<polygon fill="#2980b9" stroke="#2980b9" points="1271.58,-811.79 1281.49,-808.05 1271.41,-804.79 1271.58,-811.79"/>
<text xml:space="preserve" text-anchor="middle" x="1195.12" y="-824" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#2980b9">ctx.send →</text>
<text xml:space="preserve" text-anchor="middle" x="1195.12" y="-813.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#2980b9">buffer local</text>
</g>
<!-- e_phase5 -->
<g id="node45" class="node">
<title>e_phase5</title>
<polygon fill="#2980b9" stroke="none" points="1539.47,-737 1539.47,-763 1741.36,-763 1741.36,-737 1539.47,-737"/>
<polygon fill="none" stroke="black" points="1539.47,-737 1539.47,-763 1741.36,-763 1741.36,-737 1539.47,-737"/>
<text xml:space="preserve" text-anchor="start" x="1621.51" y="-748" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="10.00" fill="white">Phase 5</text>
<polygon fill="none" stroke="black" points="1539.47,-683 1539.47,-737 1741.36,-737 1741.36,-683 1539.47,-683"/>
<text xml:space="preserve" text-anchor="start" x="1577.06" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">DELIVER PENDING LOCAL</text>
<text xml:space="preserve" text-anchor="start" x="1546.47" y="-712" font-family="Helvetica,sans-Serif" font-size="10.00">for (addr, payload) in pending_local.take():</text>
<text xml:space="preserve" text-anchor="start" x="1564.82" y="-702" font-family="Helvetica,sans-Serif" font-size="10.00"> &#160;ActorPool::deliver(addr, payload)</text>
<text xml:space="preserve" text-anchor="start" x="1556.77" y="-692" font-family="Helvetica,sans-Serif" font-style="italic" font-size="10.00">same&#45;worker messages from phase 3</text>
</g>
<!-- e_phase4&#45;&gt;e_phase5 -->
<g id="edge38" class="edge">
<title>e_phase4&#45;&gt;e_phase5</title>
<path fill="none" stroke="#333333" stroke-width="2" d="M1411.62,-723C1444.57,-723 1482.91,-723 1518.63,-723"/>
<polygon fill="#333333" stroke="#333333" stroke-width="2" points="1518.63,-726.5 1528.63,-723 1518.63,-719.5 1518.63,-726.5"/>
</g>
<!-- e_phase4&#45;&gt;e_pool -->
<g id="edge48" class="edge">
<title>e_phase4&#45;&gt;e_pool</title>
<path fill="none" stroke="#27ae60" stroke-dasharray="5,2" d="M1411.81,-747.98C1448.44,-758.17 1491.85,-769.51 1531.47,-778 1665.97,-806.8 1826.17,-829.71 1909.4,-840.78"/>
<polygon fill="#27ae60" stroke="#27ae60" points="1908.75,-844.22 1919.12,-842.06 1909.67,-837.28 1908.75,-844.22"/>
<text xml:space="preserve" text-anchor="middle" x="1640.42" y="-820.1" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#27ae60">insert</text>
</g>
<!-- e_phase6 -->
<g id="node46" class="node">
<title>e_phase6</title>
<polygon fill="#e67300" stroke="none" points="1869.89,-745 1869.89,-771 2063.99,-771 2063.99,-745 1869.89,-745"/>
<polygon fill="none" stroke="black" points="1869.89,-745 1869.89,-771 2063.99,-771 2063.99,-745 1869.89,-745"/>
<text xml:space="preserve" text-anchor="start" x="1948.04" y="-756" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="10.00" fill="white">Phase 6</text>
<polygon fill="none" stroke="black" points="1869.89,-683 1869.89,-745 2063.99,-745 2063.99,-683 1869.89,-683"/>
<text xml:space="preserve" text-anchor="start" x="1929.16" y="-729" font-family="Helvetica,sans-Serif" font-size="10.00">UPDATE STATS</text>
<text xml:space="preserve" text-anchor="start" x="1892.19" y="-717" font-family="Helvetica,sans-Serif" font-size="10.00">stats.num_actors.store(pool.len())</text>
<text xml:space="preserve" text-anchor="start" x="1890.24" y="-705" font-family="Helvetica,sans-Serif" font-size="10.00">stats.total_mailbox_depth.store(...)</text>
<text xml:space="preserve" text-anchor="start" x="1876.89" y="-693" font-family="Helvetica,sans-Serif" font-size="10.00">stats.messages_processed.fetch_add(n)</text>
</g>
<!-- e_phase5&#45;&gt;e_phase6 -->
<g id="edge39" class="edge">
<title>e_phase5&#45;&gt;e_phase6</title>
<path fill="none" stroke="#333333" stroke-width="2" d="M1749.03,-724.33C1781.12,-724.72 1816.43,-725.16 1849.08,-725.56"/>
<polygon fill="#333333" stroke="#333333" stroke-width="2" points="1848.86,-729.06 1858.9,-725.68 1848.94,-722.06 1848.86,-729.06"/>
</g>
<!-- e_phase5&#45;&gt;e_pool -->
<g id="edge50" class="edge">
<title>e_phase5&#45;&gt;e_pool</title>
<path fill="none" stroke="#2980b9" stroke-dasharray="5,2" d="M1749.23,-760.37C1778.76,-770.96 1810.67,-782.73 1839.89,-794.2 1863.11,-803.31 1888.46,-813.98 1910.29,-823.41"/>
<polygon fill="#2980b9" stroke="#2980b9" points="1908.74,-826.56 1919.31,-827.32 1911.53,-820.13 1908.74,-826.56"/>
<text xml:space="preserve" text-anchor="middle" x="1805.63" y="-796.9" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#2980b9">deliver</text>
</g>
<!-- e_stats -->
<g id="node51" class="node">
<title>e_stats</title>
<path fill="#d1c4e9" stroke="black" d="M2245.94,-745C2245.94,-745 2192.27,-745 2192.27,-745 2186.27,-745 2180.27,-739 2180.27,-733 2180.27,-733 2180.27,-721 2180.27,-721 2180.27,-715 2186.27,-709 2192.27,-709 2192.27,-709 2245.94,-709 2245.94,-709 2251.94,-709 2257.94,-715 2257.94,-721 2257.94,-721 2257.94,-733 2257.94,-733 2257.94,-739 2251.94,-745 2245.94,-745"/>
<text xml:space="preserve" text-anchor="middle" x="2219.1" y="-730" font-family="Helvetica,sans-Serif" font-size="10.00">WorkerStats</text>
<text xml:space="preserve" text-anchor="middle" x="2219.1" y="-718" font-family="Helvetica,sans-Serif" font-size="10.00">(Arc, atomics)</text>
</g>
<!-- e_phase6&#45;&gt;e_stats -->
<g id="edge51" class="edge">
<title>e_phase6&#45;&gt;e_stats</title>
<path fill="none" stroke="#e67300" stroke-width="1.5" d="M2071.86,-727C2105.04,-727 2140.26,-727 2167.83,-727"/>
<polygon fill="#e67300" stroke="#e67300" stroke-width="1.5" points="2167.65,-730.5 2177.65,-727 2167.65,-723.5 2167.65,-730.5"/>
<text xml:space="preserve" text-anchor="middle" x="2125.01" y="-729.7" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#e67300">store/fetch_add</text>
</g>
<!-- e_spawn_rx&#45;&gt;e_phase1 -->
<g id="edge40" class="edge">
<title>e_spawn_rx&#45;&gt;e_phase1</title>
<path fill="none" stroke="#27ae60" stroke-width="1.5" d="M180.48,-764.52C225.94,-782.72 298.48,-811.76 357.07,-835.22"/>
<polygon fill="#27ae60" stroke="#27ae60" stroke-width="1.5" points="355.52,-838.37 366.11,-838.84 358.13,-831.87 355.52,-838.37"/>
<text xml:space="preserve" text-anchor="middle" x="311.7" y="-831.35" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#27ae60">(addr, actor_box)</text>
</g>
<!-- e_spawn_rx&#45;&gt;e_phase4 -->
<g id="edge47" class="edge">
<title>e_spawn_rx&#45;&gt;e_phase4</title>
<path fill="none" stroke="#27ae60" stroke-width="1.5" d="M180.48,-743.82C241.24,-739.69 354.63,-733 451.44,-733 451.44,-733 451.44,-733 1037.34,-733 1100.67,-733 1171.8,-730.54 1227.44,-728.06"/>
<polygon fill="#27ae60" stroke="#27ae60" stroke-width="1.5" points="1227.32,-731.57 1237.15,-727.62 1227,-724.58 1227.32,-731.57"/>
<text xml:space="preserve" text-anchor="middle" x="723.74" y="-735.7" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#27ae60">(addr, actor_box)</text>
</g>
<!-- e_transfer_rx -->
<g id="node48" class="node">
<title>e_transfer_rx</title>
<path fill="#d1f2eb" stroke="black" d="M496.84,-803C496.84,-805.21 476.94,-807 452.44,-807 427.94,-807 408.04,-805.21 408.04,-803 408.04,-803 408.04,-767 408.04,-767 408.04,-764.79 427.94,-763 452.44,-763 476.94,-763 496.84,-764.79 496.84,-767 496.84,-767 496.84,-803 496.84,-803"/>
<path fill="none" stroke="black" d="M496.84,-803C496.84,-800.79 476.94,-799 452.44,-799 427.94,-799 408.04,-800.79 408.04,-803"/>
<text xml:space="preserve" text-anchor="middle" x="452.44" y="-788" font-family="Helvetica,sans-Serif" font-size="10.00">transfer_rx</text>
<text xml:space="preserve" text-anchor="middle" x="452.44" y="-776" font-family="Helvetica,sans-Serif" font-size="10.00">(HybridChannel)</text>
</g>
<!-- e_transfer_rx&#45;&gt;e_phase2 -->
<g id="edge41" class="edge">
<title>e_transfer_rx&#45;&gt;e_phase2</title>
<path fill="none" stroke="#c0392b" stroke-width="1.5" d="M497.31,-793.63C530.35,-800.14 577.03,-809.32 619.35,-817.65"/>
<polygon fill="#c0392b" stroke="#c0392b" stroke-width="1.5" points="618.44,-821.04 628.93,-819.54 619.8,-814.17 618.44,-821.04"/>
<text xml:space="preserve" text-anchor="middle" x="583.92" y="-817.37" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#c0392b">Envelope</text>
</g>
<!-- e_pending&#45;&gt;e_phase5 -->
<g id="edge49" class="edge">
<title>e_pending&#45;&gt;e_phase5</title>
<path fill="none" stroke="#2980b9" stroke-width="1.5" d="M1368.08,-795.85C1406.8,-785.45 1466.44,-769.44 1519.96,-755.07"/>
<polygon fill="#2980b9" stroke="#2980b9" stroke-width="1.5" points="1520.68,-758.5 1529.43,-752.53 1518.87,-751.74 1520.68,-758.5"/>
<text xml:space="preserve" text-anchor="middle" x="1471.7" y="-780.13" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#2980b9">(addr, payload)</text>
</g>
</g>
</svg>