execjs-pcruntime 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/README.md +17 -0
- data/doc_resources/out/sequence_fastnode1/sequence_fastnode1.svg +35 -0
- data/doc_resources/out/sequence_fastnode2/sequence_fastnode2.svg +70 -0
- data/doc_resources/out/sequence_nodejs/sequence_nodejs.svg +37 -0
- data/doc_resources/out/sequence_pcruntime/sequence_pcruntime.svg +50 -0
- data/doc_resources/sequence_fastnode1.pu +25 -0
- data/doc_resources/sequence_fastnode2.pu +60 -0
- data/doc_resources/sequence_nodejs.pu +27 -0
- data/doc_resources/sequence_pcruntime.pu +40 -0
- data/lib/execjs/pcruntime/context_process_runtime.rb +1 -0
- data/lib/execjs/pcruntime/version.rb +1 -1
- data/lib/execjs/pcruntime.rb +2 -0
- metadata +11 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 33a36bdd0ffeafecbae5dff76e27596b8c1d5087e3e9fd7e935dac8d41284f63
|
|
4
|
+
data.tar.gz: 5f0f2527ade99ae2d93fc997db5c345e3e0348fd6cfa1582369e03cb34481b10
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d7216ba79372073c2a3213b11173f86fe20cdbb2267ffd5b2c8747acf4f30fec08117ee6dea6e37fe4426e2149d9f9b2ca476efb2712531b22626210a36f0450
|
|
7
|
+
data.tar.gz: 7c9741fe563eb0eb6e4633bc9ddd9d8bfd37411f9dfd9ecc72753313b71ee2a13d6e66d8aaa7f975f121d9f415f38307a04f3a0a035ee72b407524ffc0be5941
|
data/.gitignore
CHANGED
data/README.md
CHANGED
|
@@ -4,6 +4,23 @@ Accelerated ExecJS Runtime by launching Node.js Processes per Context, not per e
|
|
|
4
4
|
|
|
5
5
|
inspired by [execjs-fastnode](https://github.com/jhawthorn/execjs-fastnode)
|
|
6
6
|
|
|
7
|
+
## How PCRuntime fast?
|
|
8
|
+
|
|
9
|
+
The existing Node.js runtime spawns a Node.js process for each eval, regardless of whether it compiles or not.
|
|
10
|
+
To reduce this overhead, execjs-fastnode is designed to launch a single Node.js process and manage the Context in JavaScript.
|
|
11
|
+
|
|
12
|
+
| Node.js | execjs-fastnode |
|
|
13
|
+
|:-------------------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------------------------:|
|
|
14
|
+
|  |  |
|
|
15
|
+
|
|
16
|
+
execjs-fastnode is designed to limit the number of threads that can access a Node.js process to 1 to avoid the race condition when multiple Contexts are used.
|
|
17
|
+
execjs-pcruntime works lock-free by creating a Node.js process for each Context.
|
|
18
|
+
This improves performance when used with multi-threading.
|
|
19
|
+
|
|
20
|
+
| execjs-fastnode(multi-threading) | execjs-pcruntime |
|
|
21
|
+
|:-------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------------:|
|
|
22
|
+
|  |  |
|
|
23
|
+
|
|
7
24
|
## Requirements
|
|
8
25
|
|
|
9
26
|
- Ruby >= 3.0.0
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="417px" preserveAspectRatio="none" style="width:603px;height:417px;background:#FFFFFF;" version="1.1" viewBox="0 0 603 417" width="603px" zoomAndPan="magnify"><defs/><g><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="59.5" x2="59.5" y1="36.4883" y2="381.2598"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="394.5" x2="394.5" y1="44.4883" y2="381.2598"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="536.5" x2="536.5" y1="75.9766" y2="381.2598"/><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="109" x="5" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="95" x="12" y="25.5352">User program</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="109" x="5" y="381.2598"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="95" x="12" y="401.7949">User program</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="116" x="336.5" y="381.2598"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="102" x="343.5" y="401.7949">execjs Context</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="122" x="475.5" y="381.2598"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="108" x="482.5" y="401.7949">Node.js process</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="116" x="336.5" y="44.4883"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="102" x="343.5" y="65.0234">execjs Context</text><polygon fill="#181818" points="324.5,61.7988,334.5,65.7988,324.5,69.7988,328.5,65.7988" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="59.5" x2="330.5" y1="65.7988" y2="65.7988"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="253" x="66.5" y="61.0566">context = ExecJS.compile(initial_source)</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="122" x="475.5" y="75.9766"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="108" x="482.5" y="96.5117">Node.js process</text><polygon fill="#181818" points="463.5,93.2871,473.5,97.2871,463.5,101.2871,467.5,97.2871" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="394.5" x2="469.5" y1="97.2871" y2="97.2871"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="40" x="401.5" y="92.5449">spawn</text><polygon fill="#181818" points="524.5,124.7754,534.5,128.7754,524.5,132.7754,528.5,128.7754" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="394.5" x2="530.5" y1="128.7754" y2="128.7754"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="118" x="401.5" y="124.0332">eval(initial_source)</text><polygon fill="#181818" points="382.5,154.0859,392.5,158.0859,382.5,162.0859,386.5,158.0859" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="59.5" x2="388.5" y1="158.0859" y2="158.0859"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="132" x="66.5" y="153.3438">context.call(source1)</text><polygon fill="#181818" points="524.5,183.3965,534.5,187.3965,524.5,191.3965,528.5,187.3965" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="394.5" x2="530.5" y1="187.3965" y2="187.3965"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="83" x="401.5" y="182.6543">eval(source1)</text><polygon fill="#181818" points="405.5,212.707,395.5,216.707,405.5,220.707,401.5,216.707" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="399.5" x2="535.5" y1="216.707" y2="216.707"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="81" x="411.5" y="211.9648">result: string</text><polygon fill="#181818" points="70.5,242.0176,60.5,246.0176,70.5,250.0176,66.5,246.0176" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="64.5" x2="393.5" y1="246.0176" y2="246.0176"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="118" x="76.5" y="241.2754">result: Ruby object</text><polygon fill="#181818" points="382.5,271.3281,392.5,275.3281,382.5,279.3281,386.5,275.3281" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="59.5" x2="388.5" y1="275.3281" y2="275.3281"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="132" x="66.5" y="270.5859">context.call(source2)</text><polygon fill="#181818" points="524.5,300.6387,534.5,304.6387,524.5,308.6387,528.5,304.6387" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="394.5" x2="530.5" y1="304.6387" y2="304.6387"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="83" x="401.5" y="299.8965">eval(source2)</text><polygon fill="#181818" points="405.5,329.9492,395.5,333.9492,405.5,337.9492,401.5,333.9492" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="399.5" x2="535.5" y1="333.9492" y2="333.9492"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="81" x="411.5" y="329.207">result: string</text><polygon fill="#181818" points="70.5,359.2598,60.5,363.2598,70.5,367.2598,66.5,363.2598" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="64.5" x2="393.5" y1="363.2598" y2="363.2598"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="118" x="76.5" y="358.5176">result: Ruby object</text><!--MD5=[7b77d49a8f754d39ea997907a8f03ad1]
|
|
2
|
+
@startuml
|
|
3
|
+
|
|
4
|
+
!pragma teoz true
|
|
5
|
+
|
|
6
|
+
participant "User program" as ruby
|
|
7
|
+
participant "execjs Context" as context
|
|
8
|
+
participant "Node.js process" as node
|
|
9
|
+
|
|
10
|
+
create context
|
|
11
|
+
ruby -> context : context = ExecJS.compile(initial_source)
|
|
12
|
+
create node
|
|
13
|
+
context -> node : spawn
|
|
14
|
+
context -> node : eval(initial_source)
|
|
15
|
+
|
|
16
|
+
ruby -> context : context.call(source1)
|
|
17
|
+
context -> node : eval(source1)
|
|
18
|
+
node -> context : result: string
|
|
19
|
+
context -> ruby : result: Ruby object
|
|
20
|
+
|
|
21
|
+
ruby -> context : context.call(source2)
|
|
22
|
+
context -> node : eval(source2)
|
|
23
|
+
node -> context : result: string
|
|
24
|
+
context -> ruby : result: Ruby object
|
|
25
|
+
|
|
26
|
+
@enduml
|
|
27
|
+
|
|
28
|
+
PlantUML version 1.2022.7(Tue Aug 23 02:01:30 JST 2022)
|
|
29
|
+
(GPL source distribution)
|
|
30
|
+
Java Runtime: Java(TM) SE Runtime Environment
|
|
31
|
+
JVM: Java HotSpot(TM) 64-Bit Server VM
|
|
32
|
+
Default Encoding: UTF-8
|
|
33
|
+
Language: ja
|
|
34
|
+
Country: JP
|
|
35
|
+
--></g></svg>
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="1107px" preserveAspectRatio="none" style="width:1475px;height:1107px;background:#FFFFFF;" version="1.1" viewBox="0 0 1475 1107" width="1475px" zoomAndPan="magnify"><defs/><g><rect fill="none" height="88.1094" style="stroke:#000000;stroke-width:1.5;" width="256" x="652" y="140.7754"/><rect fill="none" height="56.6211" style="stroke:#000000;stroke-width:1.5;" width="256" x="652" y="246.8848"/><rect fill="none" height="85.9316" style="stroke:#000000;stroke-width:1.5;" width="256" x="652" y="380.127"/><rect fill="none" height="85.9316" style="stroke:#000000;stroke-width:1.5;" width="256" x="652" y="530.6797"/><rect fill="none" height="85.9316" style="stroke:#000000;stroke-width:1.5;" width="256" x="652" y="751.8535"/><rect fill="none" height="85.9316" style="stroke:#000000;stroke-width:1.5;" width="256" x="652" y="902.4063"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="93.5" x2="93.5" y1="36.4883" y2="1070.959"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="449" x2="449" y1="44.4883" y2="1070.959"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="668" x2="668" y1="36.4883" y2="1070.959"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="892" x2="892" y1="168.0859" y2="1070.959"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="1025.5" x2="1025.5" y1="75.9766" y2="1070.959"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="1381" x2="1381" y1="36.4883" y2="1070.959"/><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="177" x="5" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="163" x="12" y="25.5352">User program(Thread1)</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="113" x="611.5" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="99" x="618.5" y="25.5352">internal object</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="177" x="1292.5" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="163" x="1299.5" y="25.5352">User program(Thread2)</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="177" x="5" y="1070.959"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="163" x="12" y="1091.4941">User program(Thread1)</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="125" x="386.5" y="1070.959"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="111" x="393.5" y="1091.4941">execjs Context1</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="113" x="611.5" y="1070.959"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="99" x="618.5" y="1091.4941">internal object</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="122" x="831" y="1070.959"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="108" x="838" y="1091.4941">Node.js process</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="125" x="963" y="1070.959"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="111" x="970" y="1091.4941">execjs Context2</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="177" x="1292.5" y="1070.959"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="163" x="1299.5" y="1091.4941">User program(Thread2)</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="125" x="386.5" y="44.4883"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="111" x="393.5" y="65.0234">execjs Context1</text><polygon fill="#181818" points="374.5,61.7988,384.5,65.7988,374.5,69.7988,378.5,65.7988" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="93.5" x2="380.5" y1="65.7988" y2="65.7988"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="269" x="100.5" y="61.0566">context1 = ExecJS.compile(initial_source1)</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="125" x="963" y="75.9766"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="111" x="970" y="96.5117">execjs Context2</text><polygon fill="#181818" points="1099,93.2871,1089,97.2871,1099,101.2871,1095,97.2871" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="1093" x2="1380" y1="97.2871" y2="97.2871"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="269" x="1105" y="92.5449">context2 = ExecJS.compile(initial_source2)</text><polygon fill="#181818" points="656,124.7754,666,128.7754,656,132.7754,660,128.7754" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="449" x2="662" y1="128.7754" y2="128.7754"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="195" x="456" y="124.0332">Create Context(initial_source1)</text><polygon fill="#181818" points="679,124.7754,669,128.7754,679,132.7754,675,128.7754" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="673" x2="1024.5" y1="128.7754" y2="128.7754"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="195" x="685" y="124.0332">Create Context(initial_source2)</text><path d="M652,140.7754 L780,140.7754 L780,148.0859 L770,158.0859 L652,158.0859 L652,140.7754 " fill="#EEEEEE" style="stroke:#000000;stroke-width:1.5;"/><rect fill="none" height="88.1094" style="stroke:#000000;stroke-width:1.5;" width="256" x="652" y="140.7754"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="83" x="667" y="154.3438">synchronize</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="122" x="831" y="168.0859"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="108" x="838" y="188.6211">Node.js process</text><polygon fill="#181818" points="819,185.3965,829,189.3965,819,193.3965,823,189.3965" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="668" x2="825" y1="189.3965" y2="189.3965"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="40" x="675" y="184.6543">spawn</text><polygon fill="#181818" points="880,216.8848,890,220.8848,880,224.8848,884,220.8848" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="668" x2="886" y1="220.8848" y2="220.8848"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="200" x="675" y="216.1426">eval(context=1, initial_source1)</text><path d="M652,246.8848 L780,246.8848 L780,254.1953 L770,264.1953 L652,264.1953 L652,246.8848 " fill="#EEEEEE" style="stroke:#000000;stroke-width:1.5;"/><rect fill="none" height="56.6211" style="stroke:#000000;stroke-width:1.5;" width="256" x="652" y="246.8848"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="83" x="667" y="260.4531">synchronize</text><polygon fill="#181818" points="880,291.5059,890,295.5059,880,299.5059,884,295.5059" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="668" x2="886" y1="295.5059" y2="295.5059"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="200" x="675" y="290.7637">eval(context=2, initial_source2)</text><polygon fill="#181818" points="437,334.8164,447,338.8164,437,342.8164,441,338.8164" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="93.5" x2="443" y1="338.8164" y2="338.8164"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="140" x="100.5" y="334.0742">context1.call(source1)</text><polygon fill="#181818" points="1036.5,334.8164,1026.5,338.8164,1036.5,342.8164,1032.5,338.8164" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="1030.5" x2="1380" y1="338.8164" y2="338.8164"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="140" x="1042.5" y="334.0742">context2.call(source2)</text><polygon fill="#181818" points="656,364.127,666,368.127,656,372.127,660,368.127" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="449" x2="662" y1="368.127" y2="368.127"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="157" x="456" y="363.3848">eval(context=1, source1)</text><polygon fill="#181818" points="679,364.127,669,368.127,679,372.127,675,368.127" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="673" x2="1024.5" y1="368.127" y2="368.127"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="157" x="685" y="363.3848">eval(context=2, source2)</text><path d="M652,380.127 L780,380.127 L780,387.4375 L770,397.4375 L652,397.4375 L652,380.127 " fill="#EEEEEE" style="stroke:#000000;stroke-width:1.5;"/><rect fill="none" height="85.9316" style="stroke:#000000;stroke-width:1.5;" width="256" x="652" y="380.127"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="83" x="667" y="393.6953">synchronize</text><polygon fill="#181818" points="880,424.748,890,428.748,880,432.748,884,428.748" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="668" x2="886" y1="428.748" y2="428.748"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="157" x="675" y="424.0059">eval(context=1, source1)</text><polygon fill="#181818" points="679,454.0586,669,458.0586,679,462.0586,675,458.0586" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="673" x2="891" y1="458.0586" y2="458.0586"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="81" x="685" y="453.3164">result: string</text><polygon fill="#181818" points="460,497.3691,450,501.3691,460,505.3691,456,501.3691" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="454" x2="667" y1="501.3691" y2="501.3691"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="118" x="466" y="496.627">result: Ruby object</text><polygon fill="#181818" points="104.5,526.6797,94.5,530.6797,104.5,534.6797,100.5,530.6797" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="98.5" x2="448" y1="530.6797" y2="530.6797"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="118" x="110.5" y="525.9375">result: Ruby object</text><path d="M652,530.6797 L780,530.6797 L780,537.9902 L770,547.9902 L652,547.9902 L652,530.6797 " fill="#EEEEEE" style="stroke:#000000;stroke-width:1.5;"/><rect fill="none" height="85.9316" style="stroke:#000000;stroke-width:1.5;" width="256" x="652" y="530.6797"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="83" x="667" y="544.248">synchronize</text><polygon fill="#181818" points="880,575.3008,890,579.3008,880,583.3008,884,579.3008" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="668" x2="886" y1="579.3008" y2="579.3008"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="157" x="675" y="574.5586">eval(context=2, source2)</text><polygon fill="#181818" points="679,604.6113,669,608.6113,679,612.6113,675,608.6113" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="673" x2="891" y1="608.6113" y2="608.6113"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="81" x="685" y="603.8691">result: string</text><polygon fill="#181818" points="1013.5,647.9219,1023.5,651.9219,1013.5,655.9219,1017.5,651.9219" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="668" x2="1019.5" y1="651.9219" y2="651.9219"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="118" x="675" y="647.1797">result: Ruby object</text><polygon fill="#181818" points="1369,677.2324,1379,681.2324,1369,685.2324,1373,681.2324" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="1025.5" x2="1375" y1="681.2324" y2="681.2324"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="118" x="1032.5" y="676.4902">result: Ruby object</text><polygon fill="#181818" points="437,706.543,447,710.543,437,714.543,441,710.543" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="93.5" x2="443" y1="710.543" y2="710.543"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="140" x="100.5" y="705.8008">context1.call(source3)</text><polygon fill="#181818" points="1036.5,706.543,1026.5,710.543,1036.5,714.543,1032.5,710.543" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="1030.5" x2="1380" y1="710.543" y2="710.543"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="140" x="1042.5" y="705.8008">context2.call(source4)</text><polygon fill="#181818" points="656,735.8535,666,739.8535,656,743.8535,660,739.8535" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="449" x2="662" y1="739.8535" y2="739.8535"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="157" x="456" y="735.1113">eval(context=1, source3)</text><polygon fill="#181818" points="679,735.8535,669,739.8535,679,743.8535,675,739.8535" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="673" x2="1024.5" y1="739.8535" y2="739.8535"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="157" x="685" y="735.1113">eval(context=2, source4)</text><path d="M652,751.8535 L780,751.8535 L780,759.1641 L770,769.1641 L652,769.1641 L652,751.8535 " fill="#EEEEEE" style="stroke:#000000;stroke-width:1.5;"/><rect fill="none" height="85.9316" style="stroke:#000000;stroke-width:1.5;" width="256" x="652" y="751.8535"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="83" x="667" y="765.4219">synchronize</text><polygon fill="#181818" points="880,796.4746,890,800.4746,880,804.4746,884,800.4746" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="668" x2="886" y1="800.4746" y2="800.4746"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="157" x="675" y="795.7324">eval(context=2, source4)</text><polygon fill="#181818" points="679,825.7852,669,829.7852,679,833.7852,675,829.7852" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="673" x2="891" y1="829.7852" y2="829.7852"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="81" x="685" y="825.043">result: string</text><polygon fill="#181818" points="1013.5,869.0957,1023.5,873.0957,1013.5,877.0957,1017.5,873.0957" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="668" x2="1019.5" y1="873.0957" y2="873.0957"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="118" x="675" y="868.3535">result: Ruby object</text><polygon fill="#181818" points="1369,898.4063,1379,902.4063,1369,906.4063,1373,902.4063" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="1025.5" x2="1375" y1="902.4063" y2="902.4063"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="118" x="1032.5" y="897.6641">result: Ruby object</text><path d="M652,902.4063 L780,902.4063 L780,909.7168 L770,919.7168 L652,919.7168 L652,902.4063 " fill="#EEEEEE" style="stroke:#000000;stroke-width:1.5;"/><rect fill="none" height="85.9316" style="stroke:#000000;stroke-width:1.5;" width="256" x="652" y="902.4063"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="83" x="667" y="915.9746">synchronize</text><polygon fill="#181818" points="880,947.0273,890,951.0273,880,955.0273,884,951.0273" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="668" x2="886" y1="951.0273" y2="951.0273"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="157" x="675" y="946.2852">eval(context=1, source3)</text><polygon fill="#181818" points="679,976.3379,669,980.3379,679,984.3379,675,980.3379" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="673" x2="891" y1="980.3379" y2="980.3379"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="81" x="685" y="975.5957">result: string</text><polygon fill="#181818" points="460,1019.6484,450,1023.6484,460,1027.6484,456,1023.6484" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="454" x2="667" y1="1023.6484" y2="1023.6484"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="118" x="466" y="1018.9063">result: Ruby object</text><polygon fill="#181818" points="104.5,1048.959,94.5,1052.959,104.5,1056.959,100.5,1052.959" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="98.5" x2="448" y1="1052.959" y2="1052.959"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="118" x="110.5" y="1048.2168">result: Ruby object</text><!--MD5=[8231295b6a95a226c222b426b1af1829]
|
|
2
|
+
@startuml
|
|
3
|
+
|
|
4
|
+
!pragma teoz true
|
|
5
|
+
|
|
6
|
+
participant "User program(Thread1)" as ruby1
|
|
7
|
+
participant "execjs Context1" as context1
|
|
8
|
+
participant "internal object" as vm
|
|
9
|
+
participant "Node.js process" as node
|
|
10
|
+
participant "execjs Context2" as context2
|
|
11
|
+
participant "User program(Thread2)" as ruby2
|
|
12
|
+
|
|
13
|
+
create context1
|
|
14
|
+
ruby1 -> context1 : context1 = ExecJS.compile(initial_source1)
|
|
15
|
+
create context2
|
|
16
|
+
ruby2 -> context2 : context2 = ExecJS.compile(initial_source2)
|
|
17
|
+
context1 -> vm : Create Context(initial_source1)
|
|
18
|
+
& context2 -> vm : Create Context(initial_source2)
|
|
19
|
+
create node
|
|
20
|
+
group synchronize
|
|
21
|
+
vm -> node : spawn
|
|
22
|
+
vm -> node : eval(context=1, initial_source1)
|
|
23
|
+
end
|
|
24
|
+
group synchronize
|
|
25
|
+
vm -> node : eval(context=2, initial_source2)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
ruby1 -> context1 : context1.call(source1)
|
|
29
|
+
& ruby2 -> context2 : context2.call(source2)
|
|
30
|
+
context1 -> vm : eval(context=1, source1)
|
|
31
|
+
& context2 -> vm : eval(context=2, source2)
|
|
32
|
+
group synchronize
|
|
33
|
+
vm -> node : eval(context=1, source1)
|
|
34
|
+
node -> vm : result: string
|
|
35
|
+
end
|
|
36
|
+
vm -> context1 : result: Ruby object
|
|
37
|
+
context1 -> ruby1 : result: Ruby object
|
|
38
|
+
& group synchronize
|
|
39
|
+
vm -> node : eval(context=2, source2)
|
|
40
|
+
node -> vm : result: string
|
|
41
|
+
end
|
|
42
|
+
vm -> context2 : result: Ruby object
|
|
43
|
+
context2 -> ruby2 : result: Ruby object
|
|
44
|
+
|
|
45
|
+
ruby1 -> context1 : context1.call(source3)
|
|
46
|
+
& ruby2 -> context2 : context2.call(source4)
|
|
47
|
+
context1 -> vm : eval(context=1, source3)
|
|
48
|
+
& context2 -> vm : eval(context=2, source4)
|
|
49
|
+
group synchronize
|
|
50
|
+
vm -> node : eval(context=2, source4)
|
|
51
|
+
node -> vm : result: string
|
|
52
|
+
end
|
|
53
|
+
vm -> context2 : result: Ruby object
|
|
54
|
+
context2 -> ruby2 : result: Ruby object
|
|
55
|
+
& group synchronize
|
|
56
|
+
vm -> node : eval(context=1, source3)
|
|
57
|
+
node -> vm : result: string
|
|
58
|
+
end
|
|
59
|
+
vm -> context1 : result: Ruby object
|
|
60
|
+
context1 -> ruby1 : result: Ruby object
|
|
61
|
+
@enduml
|
|
62
|
+
|
|
63
|
+
PlantUML version 1.2022.7(Tue Aug 23 02:01:30 JST 2022)
|
|
64
|
+
(GPL source distribution)
|
|
65
|
+
Java Runtime: Java(TM) SE Runtime Environment
|
|
66
|
+
JVM: Java HotSpot(TM) 64-Bit Server VM
|
|
67
|
+
Default Encoding: UTF-8
|
|
68
|
+
Language: ja
|
|
69
|
+
Country: JP
|
|
70
|
+
--></g></svg>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="361px" preserveAspectRatio="none" style="width:882px;height:361px;background:#FFFFFF;" version="1.1" viewBox="0 0 882 361" width="882px" zoomAndPan="magnify"><defs/><g><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="59.5" x2="59.5" y1="36.4883" y2="324.8164"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="394.5" x2="394.5" y1="44.4883" y2="324.8164"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="670" x2="670" y1="105.2871" y2="324.8164"/><line style="stroke:#181818;stroke-width:2.0;" x1="661" x2="679" y1="149.0859" y2="167.0859"/><line style="stroke:#181818;stroke-width:2.0;" x1="661" x2="679" y1="167.0859" y2="149.0859"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="811" x2="811" y1="224.707" y2="324.8164"/><line style="stroke:#181818;stroke-width:2.0;" x1="802" x2="820" y1="268.5059" y2="286.5059"/><line style="stroke:#181818;stroke-width:2.0;" x1="802" x2="820" y1="286.5059" y2="268.5059"/><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="109" x="5" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="95" x="12" y="25.5352">User program</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="109" x="5" y="324.8164"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="95" x="12" y="345.3516">User program</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="116" x="336.5" y="324.8164"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="102" x="343.5" y="345.3516">execjs Context</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="131" x="604.5" y="324.8164"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="611.5" y="345.3516">Node.js process1</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="131" x="745.5" y="324.8164"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="752.5" y="345.3516">Node.js process2</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="116" x="336.5" y="44.4883"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="102" x="343.5" y="65.0234">execjs Context</text><polygon fill="#181818" points="324.5,61.7988,334.5,65.7988,324.5,69.7988,328.5,65.7988" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="59.5" x2="330.5" y1="65.7988" y2="65.7988"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="253" x="66.5" y="61.0566">context = ExecJS.compile(initial_source)</text><polygon fill="#181818" points="382.5,93.2871,392.5,97.2871,382.5,101.2871,386.5,97.2871" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="59.5" x2="388.5" y1="97.2871" y2="97.2871"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="132" x="66.5" y="92.5449">context.call(source1)</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="131" x="604.5" y="105.2871"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="611.5" y="125.8223">Node.js process1</text><polygon fill="#181818" points="592.5,122.5977,602.5,126.5977,592.5,130.5977,596.5,126.5977" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="394.5" x2="598.5" y1="126.5977" y2="126.5977"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="186" x="401.5" y="121.8555">eval(initial_source + source1)</text><polygon fill="#181818" points="405.5,154.0859,395.5,158.0859,405.5,162.0859,401.5,158.0859" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="399.5" x2="669" y1="158.0859" y2="158.0859"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="81" x="411.5" y="153.3438">result: string</text><polygon fill="#181818" points="70.5,183.3965,60.5,187.3965,70.5,191.3965,66.5,187.3965" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="64.5" x2="393.5" y1="187.3965" y2="187.3965"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="118" x="76.5" y="182.6543">result: Ruby object</text><polygon fill="#181818" points="382.5,212.707,392.5,216.707,382.5,220.707,386.5,216.707" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="59.5" x2="388.5" y1="216.707" y2="216.707"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="132" x="66.5" y="211.9648">context.call(source2)</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="131" x="745.5" y="224.707"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="752.5" y="245.2422">Node.js process2</text><polygon fill="#181818" points="733.5,242.0176,743.5,246.0176,733.5,250.0176,737.5,246.0176" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="394.5" x2="739.5" y1="246.0176" y2="246.0176"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="186" x="401.5" y="241.2754">eval(initial_source + source2)</text><polygon fill="#181818" points="405.5,273.5059,395.5,277.5059,405.5,281.5059,401.5,277.5059" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="399.5" x2="810" y1="277.5059" y2="277.5059"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="81" x="411.5" y="272.7637">result: string</text><polygon fill="#181818" points="70.5,302.8164,60.5,306.8164,70.5,310.8164,66.5,306.8164" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="64.5" x2="393.5" y1="306.8164" y2="306.8164"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="118" x="76.5" y="302.0742">result: Ruby object</text><!--MD5=[a771d5800578c0fe5d3a9efcad94a7c7]
|
|
2
|
+
@startuml
|
|
3
|
+
|
|
4
|
+
!pragma teoz true
|
|
5
|
+
|
|
6
|
+
participant "User program" as ruby
|
|
7
|
+
participant "execjs Context" as context
|
|
8
|
+
participant "Node.js process1" as node1
|
|
9
|
+
participant "Node.js process2" as node2
|
|
10
|
+
|
|
11
|
+
create context
|
|
12
|
+
ruby -> context : context = ExecJS.compile(initial_source)
|
|
13
|
+
|
|
14
|
+
ruby -> context : context.call(source1)
|
|
15
|
+
create node1
|
|
16
|
+
context -> node1 : eval(initial_source + source1)
|
|
17
|
+
node1 -> context : result: string
|
|
18
|
+
destroy node1
|
|
19
|
+
context -> ruby : result: Ruby object
|
|
20
|
+
|
|
21
|
+
ruby -> context : context.call(source2)
|
|
22
|
+
create node2
|
|
23
|
+
context -> node2 : eval(initial_source + source2)
|
|
24
|
+
node2 -> context : result: string
|
|
25
|
+
destroy node2
|
|
26
|
+
context -> ruby : result: Ruby object
|
|
27
|
+
|
|
28
|
+
@enduml
|
|
29
|
+
|
|
30
|
+
PlantUML version 1.2022.7(Tue Aug 23 02:01:30 JST 2022)
|
|
31
|
+
(GPL source distribution)
|
|
32
|
+
Java Runtime: Java(TM) SE Runtime Environment
|
|
33
|
+
JVM: Java HotSpot(TM) 64-Bit Server VM
|
|
34
|
+
Default Encoding: UTF-8
|
|
35
|
+
Language: ja
|
|
36
|
+
Country: JP
|
|
37
|
+
--></g></svg>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="480px" preserveAspectRatio="none" style="width:1340px;height:480px;background:#FFFFFF;" version="1.1" viewBox="0 0 1340 480" width="1340px" zoomAndPan="magnify"><defs/><g><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="93.5" x2="93.5" y1="36.4883" y2="444.2363"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="449" x2="449" y1="44.4883" y2="444.2363"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="599" x2="599" y1="107.4648" y2="444.2363"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="763" x2="763" y1="36.4883" y2="444.2363"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="1118.5" x2="1118.5" y1="75.9766" y2="444.2363"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="1268.5" x2="1268.5" y1="138.9531" y2="444.2363"/><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="177" x="5" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="163" x="12" y="25.5352">User program(Thread1)</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="177" x="674.5" y="5"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="163" x="681.5" y="25.5352">User program(Thread2)</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="177" x="5" y="444.2363"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="163" x="12" y="464.7715">User program(Thread1)</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="125" x="386.5" y="444.2363"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="111" x="393.5" y="464.7715">execjs Context1</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="131" x="533.5" y="444.2363"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="540.5" y="464.7715">Node.js process1</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="177" x="674.5" y="444.2363"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="163" x="681.5" y="464.7715">User program(Thread2)</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="125" x="1056" y="444.2363"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="111" x="1063" y="464.7715">execjs Context2</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="131" x="1203" y="444.2363"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="1210" y="464.7715">Node.js process2</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="125" x="386.5" y="44.4883"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="111" x="393.5" y="65.0234">execjs Context1</text><polygon fill="#181818" points="374.5,61.7988,384.5,65.7988,374.5,69.7988,378.5,65.7988" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="93.5" x2="380.5" y1="65.7988" y2="65.7988"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="269" x="100.5" y="61.0566">context1 = ExecJS.compile(initial_source1)</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="125" x="1056" y="75.9766"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="111" x="1063" y="96.5117">execjs Context2</text><polygon fill="#181818" points="1044,93.2871,1054,97.2871,1044,101.2871,1048,97.2871" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="763" x2="1050" y1="97.2871" y2="97.2871"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="269" x="770" y="92.5449">context2 = ExecJS.compile(initial_source2)</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="131" x="533.5" y="107.4648"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="540.5" y="128">Node.js process1</text><polygon fill="#181818" points="521.5,124.7754,531.5,128.7754,521.5,132.7754,525.5,128.7754" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="449" x2="527.5" y1="128.7754" y2="128.7754"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="40" x="456" y="124.0332">spawn</text><rect fill="#E2E2F0" height="30.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="131" x="1203" y="138.9531"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="1210" y="159.4883">Node.js process2</text><polygon fill="#181818" points="1191,156.2637,1201,160.2637,1191,164.2637,1195,160.2637" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="1118.5" x2="1197" y1="160.2637" y2="160.2637"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="40" x="1125.5" y="155.5215">spawn</text><polygon fill="#181818" points="587,187.752,597,191.752,587,195.752,591,191.752" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="449" x2="593" y1="191.752" y2="191.752"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="126" x="456" y="187.0098">eval(initial_source1)</text><polygon fill="#181818" points="1256.5,187.752,1266.5,191.752,1256.5,195.752,1260.5,191.752" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="1118.5" x2="1262.5" y1="191.752" y2="191.752"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="126" x="1125.5" y="187.0098">eval(initial_source2)</text><polygon fill="#181818" points="437,217.0625,447,221.0625,437,225.0625,441,221.0625" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="93.5" x2="443" y1="221.0625" y2="221.0625"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="140" x="100.5" y="216.3203">context1.call(source1)</text><polygon fill="#181818" points="1106.5,217.0625,1116.5,221.0625,1106.5,225.0625,1110.5,221.0625" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="763" x2="1112.5" y1="221.0625" y2="221.0625"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="140" x="770" y="216.3203">context2.call(source2)</text><polygon fill="#181818" points="587,246.373,597,250.373,587,254.373,591,250.373" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="449" x2="593" y1="250.373" y2="250.373"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="83" x="456" y="245.6309">eval(source1)</text><polygon fill="#181818" points="1256.5,246.373,1266.5,250.373,1256.5,254.373,1260.5,250.373" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="1118.5" x2="1262.5" y1="250.373" y2="250.373"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="83" x="1125.5" y="245.6309">eval(source2)</text><polygon fill="#181818" points="460,275.6836,450,279.6836,460,283.6836,456,279.6836" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="454" x2="598" y1="279.6836" y2="279.6836"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="81" x="466" y="274.9414">result: string</text><polygon fill="#181818" points="1129.5,275.6836,1119.5,279.6836,1129.5,283.6836,1125.5,279.6836" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="1123.5" x2="1267.5" y1="279.6836" y2="279.6836"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="81" x="1135.5" y="274.9414">result: string</text><polygon fill="#181818" points="104.5,304.9941,94.5,308.9941,104.5,312.9941,100.5,308.9941" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="98.5" x2="448" y1="308.9941" y2="308.9941"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="118" x="110.5" y="304.252">result: Ruby object</text><polygon fill="#181818" points="774,304.9941,764,308.9941,774,312.9941,770,308.9941" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="768" x2="1117.5" y1="308.9941" y2="308.9941"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="118" x="780" y="304.252">result: Ruby object</text><polygon fill="#181818" points="437,334.3047,447,338.3047,437,342.3047,441,338.3047" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="93.5" x2="443" y1="338.3047" y2="338.3047"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="140" x="100.5" y="333.5625">context1.call(source3)</text><polygon fill="#181818" points="1106.5,334.3047,1116.5,338.3047,1106.5,342.3047,1110.5,338.3047" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="763" x2="1112.5" y1="338.3047" y2="338.3047"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="140" x="770" y="333.5625">context2.call(source4)</text><polygon fill="#181818" points="587,363.6152,597,367.6152,587,371.6152,591,367.6152" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="449" x2="593" y1="367.6152" y2="367.6152"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="83" x="456" y="362.873">eval(source3)</text><polygon fill="#181818" points="1256.5,363.6152,1266.5,367.6152,1256.5,371.6152,1260.5,367.6152" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="1118.5" x2="1262.5" y1="367.6152" y2="367.6152"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="83" x="1125.5" y="362.873">eval(source4)</text><polygon fill="#181818" points="460,392.9258,450,396.9258,460,400.9258,456,396.9258" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="454" x2="598" y1="396.9258" y2="396.9258"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="81" x="466" y="392.1836">result: string</text><polygon fill="#181818" points="1129.5,392.9258,1119.5,396.9258,1129.5,400.9258,1125.5,396.9258" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="1123.5" x2="1267.5" y1="396.9258" y2="396.9258"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="81" x="1135.5" y="392.1836">result: string</text><polygon fill="#181818" points="104.5,422.2363,94.5,426.2363,104.5,430.2363,100.5,426.2363" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="98.5" x2="448" y1="426.2363" y2="426.2363"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="118" x="110.5" y="421.4941">result: Ruby object</text><polygon fill="#181818" points="774,422.2363,764,426.2363,774,430.2363,770,426.2363" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="768" x2="1117.5" y1="426.2363" y2="426.2363"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="118" x="780" y="421.4941">result: Ruby object</text><!--MD5=[ee283807631a6e11c93e5d8079e71f92]
|
|
2
|
+
@startuml
|
|
3
|
+
|
|
4
|
+
!pragma teoz true
|
|
5
|
+
|
|
6
|
+
participant "User program(Thread1)" as ruby1
|
|
7
|
+
participant "execjs Context1" as context1
|
|
8
|
+
participant "Node.js process1" as node1
|
|
9
|
+
participant "User program(Thread2)" as ruby2
|
|
10
|
+
participant "execjs Context2" as context2
|
|
11
|
+
participant "Node.js process2" as node2
|
|
12
|
+
|
|
13
|
+
create context1
|
|
14
|
+
ruby1 -> context1 : context1 = ExecJS.compile(initial_source1)
|
|
15
|
+
create context2
|
|
16
|
+
ruby2 -> context2 : context2 = ExecJS.compile(initial_source2)
|
|
17
|
+
create node1
|
|
18
|
+
context1 -> node1 : spawn
|
|
19
|
+
create node2
|
|
20
|
+
context2 -> node2 : spawn
|
|
21
|
+
context1 -> node1 : eval(initial_source1)
|
|
22
|
+
& context2 -> node2 : eval(initial_source2)
|
|
23
|
+
|
|
24
|
+
ruby1 -> context1 : context1.call(source1)
|
|
25
|
+
& ruby2 -> context2 : context2.call(source2)
|
|
26
|
+
context1 -> node1 : eval(source1)
|
|
27
|
+
& context2 -> node2 : eval(source2)
|
|
28
|
+
node1 -> context1 : result: string
|
|
29
|
+
& node2 -> context2 : result: string
|
|
30
|
+
context1 -> ruby1 : result: Ruby object
|
|
31
|
+
& context2 -> ruby2 : result: Ruby object
|
|
32
|
+
|
|
33
|
+
ruby1 -> context1 : context1.call(source3)
|
|
34
|
+
& ruby2 -> context2 : context2.call(source4)
|
|
35
|
+
context1 -> node1 : eval(source3)
|
|
36
|
+
& context2 -> node2 : eval(source4)
|
|
37
|
+
node1 -> context1 : result: string
|
|
38
|
+
& node2 -> context2 : result: string
|
|
39
|
+
context1 -> ruby1 : result: Ruby object
|
|
40
|
+
& context2 -> ruby2 : result: Ruby object
|
|
41
|
+
@enduml
|
|
42
|
+
|
|
43
|
+
PlantUML version 1.2022.7(Tue Aug 23 02:01:30 JST 2022)
|
|
44
|
+
(GPL source distribution)
|
|
45
|
+
Java Runtime: Java(TM) SE Runtime Environment
|
|
46
|
+
JVM: Java HotSpot(TM) 64-Bit Server VM
|
|
47
|
+
Default Encoding: UTF-8
|
|
48
|
+
Language: ja
|
|
49
|
+
Country: JP
|
|
50
|
+
--></g></svg>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
@startuml
|
|
2
|
+
|
|
3
|
+
!pragma teoz true
|
|
4
|
+
|
|
5
|
+
participant "User program" as ruby
|
|
6
|
+
participant "execjs Context" as context
|
|
7
|
+
participant "Node.js process" as node
|
|
8
|
+
|
|
9
|
+
create context
|
|
10
|
+
ruby -> context : context = ExecJS.compile(initial_source)
|
|
11
|
+
create node
|
|
12
|
+
context -> node : spawn
|
|
13
|
+
context -> node : eval(initial_source)
|
|
14
|
+
|
|
15
|
+
ruby -> context : context.call(source1)
|
|
16
|
+
context -> node : eval(source1)
|
|
17
|
+
node -> context : result: string
|
|
18
|
+
context -> ruby : result: Ruby object
|
|
19
|
+
|
|
20
|
+
ruby -> context : context.call(source2)
|
|
21
|
+
context -> node : eval(source2)
|
|
22
|
+
node -> context : result: string
|
|
23
|
+
context -> ruby : result: Ruby object
|
|
24
|
+
|
|
25
|
+
@enduml
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
@startuml
|
|
2
|
+
|
|
3
|
+
!pragma teoz true
|
|
4
|
+
|
|
5
|
+
participant "User program(Thread1)" as ruby1
|
|
6
|
+
participant "execjs Context1" as context1
|
|
7
|
+
participant "internal object" as vm
|
|
8
|
+
participant "Node.js process" as node
|
|
9
|
+
participant "execjs Context2" as context2
|
|
10
|
+
participant "User program(Thread2)" as ruby2
|
|
11
|
+
|
|
12
|
+
create context1
|
|
13
|
+
ruby1 -> context1 : context1 = ExecJS.compile(initial_source1)
|
|
14
|
+
create context2
|
|
15
|
+
ruby2 -> context2 : context2 = ExecJS.compile(initial_source2)
|
|
16
|
+
context1 -> vm : Create Context(initial_source1)
|
|
17
|
+
& context2 -> vm : Create Context(initial_source2)
|
|
18
|
+
create node
|
|
19
|
+
group synchronize
|
|
20
|
+
vm -> node : spawn
|
|
21
|
+
vm -> node : eval(context=1, initial_source1)
|
|
22
|
+
end
|
|
23
|
+
group synchronize
|
|
24
|
+
vm -> node : eval(context=2, initial_source2)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
ruby1 -> context1 : context1.call(source1)
|
|
28
|
+
& ruby2 -> context2 : context2.call(source2)
|
|
29
|
+
context1 -> vm : eval(context=1, source1)
|
|
30
|
+
& context2 -> vm : eval(context=2, source2)
|
|
31
|
+
group synchronize
|
|
32
|
+
vm -> node : eval(context=1, source1)
|
|
33
|
+
node -> vm : result: string
|
|
34
|
+
end
|
|
35
|
+
vm -> context1 : result: Ruby object
|
|
36
|
+
context1 -> ruby1 : result: Ruby object
|
|
37
|
+
& group synchronize
|
|
38
|
+
vm -> node : eval(context=2, source2)
|
|
39
|
+
node -> vm : result: string
|
|
40
|
+
end
|
|
41
|
+
vm -> context2 : result: Ruby object
|
|
42
|
+
context2 -> ruby2 : result: Ruby object
|
|
43
|
+
|
|
44
|
+
ruby1 -> context1 : context1.call(source3)
|
|
45
|
+
& ruby2 -> context2 : context2.call(source4)
|
|
46
|
+
context1 -> vm : eval(context=1, source3)
|
|
47
|
+
& context2 -> vm : eval(context=2, source4)
|
|
48
|
+
group synchronize
|
|
49
|
+
vm -> node : eval(context=2, source4)
|
|
50
|
+
node -> vm : result: string
|
|
51
|
+
end
|
|
52
|
+
vm -> context2 : result: Ruby object
|
|
53
|
+
context2 -> ruby2 : result: Ruby object
|
|
54
|
+
& group synchronize
|
|
55
|
+
vm -> node : eval(context=1, source3)
|
|
56
|
+
node -> vm : result: string
|
|
57
|
+
end
|
|
58
|
+
vm -> context1 : result: Ruby object
|
|
59
|
+
context1 -> ruby1 : result: Ruby object
|
|
60
|
+
@enduml
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
@startuml
|
|
2
|
+
|
|
3
|
+
!pragma teoz true
|
|
4
|
+
|
|
5
|
+
participant "User program" as ruby
|
|
6
|
+
participant "execjs Context" as context
|
|
7
|
+
participant "Node.js process1" as node1
|
|
8
|
+
participant "Node.js process2" as node2
|
|
9
|
+
|
|
10
|
+
create context
|
|
11
|
+
ruby -> context : context = ExecJS.compile(initial_source)
|
|
12
|
+
|
|
13
|
+
ruby -> context : context.call(source1)
|
|
14
|
+
create node1
|
|
15
|
+
context -> node1 : eval(initial_source + source1)
|
|
16
|
+
node1 -> context : result: string
|
|
17
|
+
destroy node1
|
|
18
|
+
context -> ruby : result: Ruby object
|
|
19
|
+
|
|
20
|
+
ruby -> context : context.call(source2)
|
|
21
|
+
create node2
|
|
22
|
+
context -> node2 : eval(initial_source + source2)
|
|
23
|
+
node2 -> context : result: string
|
|
24
|
+
destroy node2
|
|
25
|
+
context -> ruby : result: Ruby object
|
|
26
|
+
|
|
27
|
+
@enduml
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
@startuml
|
|
2
|
+
|
|
3
|
+
!pragma teoz true
|
|
4
|
+
|
|
5
|
+
participant "User program(Thread1)" as ruby1
|
|
6
|
+
participant "execjs Context1" as context1
|
|
7
|
+
participant "Node.js process1" as node1
|
|
8
|
+
participant "User program(Thread2)" as ruby2
|
|
9
|
+
participant "execjs Context2" as context2
|
|
10
|
+
participant "Node.js process2" as node2
|
|
11
|
+
|
|
12
|
+
create context1
|
|
13
|
+
ruby1 -> context1 : context1 = ExecJS.compile(initial_source1)
|
|
14
|
+
create context2
|
|
15
|
+
ruby2 -> context2 : context2 = ExecJS.compile(initial_source2)
|
|
16
|
+
create node1
|
|
17
|
+
context1 -> node1 : spawn
|
|
18
|
+
create node2
|
|
19
|
+
context2 -> node2 : spawn
|
|
20
|
+
context1 -> node1 : eval(initial_source1)
|
|
21
|
+
& context2 -> node2 : eval(initial_source2)
|
|
22
|
+
|
|
23
|
+
ruby1 -> context1 : context1.call(source1)
|
|
24
|
+
& ruby2 -> context2 : context2.call(source2)
|
|
25
|
+
context1 -> node1 : eval(source1)
|
|
26
|
+
& context2 -> node2 : eval(source2)
|
|
27
|
+
node1 -> context1 : result: string
|
|
28
|
+
& node2 -> context2 : result: string
|
|
29
|
+
context1 -> ruby1 : result: Ruby object
|
|
30
|
+
& context2 -> ruby2 : result: Ruby object
|
|
31
|
+
|
|
32
|
+
ruby1 -> context1 : context1.call(source3)
|
|
33
|
+
& ruby2 -> context2 : context2.call(source4)
|
|
34
|
+
context1 -> node1 : eval(source3)
|
|
35
|
+
& context2 -> node2 : eval(source4)
|
|
36
|
+
node1 -> context1 : result: string
|
|
37
|
+
& node2 -> context2 : result: string
|
|
38
|
+
context1 -> ruby1 : result: Ruby object
|
|
39
|
+
& context2 -> ruby2 : result: Ruby object
|
|
40
|
+
@enduml
|
data/lib/execjs/pcruntime.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: execjs-pcruntime
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- White-Green
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-07-
|
|
11
|
+
date: 2023-07-28 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: execjs
|
|
@@ -40,6 +40,14 @@ files:
|
|
|
40
40
|
- Rakefile
|
|
41
41
|
- bin/console
|
|
42
42
|
- bin/setup
|
|
43
|
+
- doc_resources/out/sequence_fastnode1/sequence_fastnode1.svg
|
|
44
|
+
- doc_resources/out/sequence_fastnode2/sequence_fastnode2.svg
|
|
45
|
+
- doc_resources/out/sequence_nodejs/sequence_nodejs.svg
|
|
46
|
+
- doc_resources/out/sequence_pcruntime/sequence_pcruntime.svg
|
|
47
|
+
- doc_resources/sequence_fastnode1.pu
|
|
48
|
+
- doc_resources/sequence_fastnode2.pu
|
|
49
|
+
- doc_resources/sequence_nodejs.pu
|
|
50
|
+
- doc_resources/sequence_pcruntime.pu
|
|
43
51
|
- execjs-pcruntime.gemspec
|
|
44
52
|
- lib/execjs/pcruntime.rb
|
|
45
53
|
- lib/execjs/pcruntime/context_process_runtime.rb
|
|
@@ -68,7 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
68
76
|
- !ruby/object:Gem::Version
|
|
69
77
|
version: '0'
|
|
70
78
|
requirements: []
|
|
71
|
-
rubygems_version: 3.
|
|
79
|
+
rubygems_version: 3.3.26
|
|
72
80
|
signing_key:
|
|
73
81
|
specification_version: 4
|
|
74
82
|
summary: Fast ExecJS Runtime using Process as a Context.
|