8
8
9
9
namespace Jering . Javascript . NodeJS . Performance
10
10
{
11
- // TODO after adding invoke method with no return value (analagous to execute method in js engines), remove string type parameters
12
11
[ MemoryDiagnoser ]
13
12
public class ConcurrencyBenchmarks
14
13
{
15
- private const string DUMMY_CONCURRENCY_MODULE = "dummyConcurrencyModule.js" ;
14
+ private const string DUMMY_WARMUP_MODULE = "module.exports = (callback) => callback()" ;
15
+ private const string DUMMY_CONCURRENCY_MODULE_FILE = "dummyConcurrencyModule.js" ;
16
16
17
17
private ServiceProvider _serviceProvider ;
18
18
private INodeJSService _nodeJSService ;
@@ -29,11 +29,11 @@ public void INodeJSService_Concurrency_MultiProcess_Setup()
29
29
_serviceProvider = services . BuildServiceProvider ( ) ;
30
30
_nodeJSService = _serviceProvider . GetRequiredService < INodeJSService > ( ) ;
31
31
32
- // Warm up . First few runs start Node.js processes, so they take longer. If we don't manually warm up, BenchmarkDotNet erroneously complains
32
+ // Warmup . First few runs start Node.js processes, so they take longer. If we don't manually warm up, BenchmarkDotNet erroneously complains
33
33
// about iteration time being too low
34
34
for ( int i = 0 ; i < Environment . ProcessorCount ; i ++ )
35
35
{
36
- _nodeJSService . InvokeFromStringAsync < string > ( "module.exports = (callback) => callback(null, null)" , "warmup" ) . GetAwaiter ( ) . GetResult ( ) ;
36
+ _nodeJSService . InvokeFromStringAsync ( DUMMY_WARMUP_MODULE ) . GetAwaiter ( ) . GetResult ( ) ;
37
37
}
38
38
}
39
39
@@ -45,7 +45,7 @@ public async Task<string[]> INodeJSService_Concurrency_MultiProcess()
45
45
var results = new Task < string > [ numTasks ] ;
46
46
for ( int i = 0 ; i < numTasks ; i ++ )
47
47
{
48
- results [ i ] = _nodeJSService . InvokeFromFileAsync < string > ( DUMMY_CONCURRENCY_MODULE ) ;
48
+ results [ i ] = _nodeJSService . InvokeFromFileAsync < string > ( DUMMY_CONCURRENCY_MODULE_FILE ) ;
49
49
}
50
50
51
51
return await Task . WhenAll ( results ) ;
@@ -60,8 +60,8 @@ public void INodeJSService_Concurrency_None_Setup()
60
60
_serviceProvider = services . BuildServiceProvider ( ) ;
61
61
_nodeJSService = _serviceProvider . GetRequiredService < INodeJSService > ( ) ;
62
62
63
- // Warm up . First run starts a Node.js processes.
64
- _nodeJSService . InvokeFromStringAsync < string > ( "module.exports = (callback) => callback(null, null)" , "warmup" ) . GetAwaiter ( ) . GetResult ( ) ;
63
+ // Warmup . First run starts a Node.js processes.
64
+ _nodeJSService . InvokeFromStringAsync ( DUMMY_WARMUP_MODULE ) . GetAwaiter ( ) . GetResult ( ) ;
65
65
}
66
66
67
67
[ Benchmark ]
@@ -72,7 +72,7 @@ public async Task<string[]> INodeJSService_Concurrency_None()
72
72
var results = new Task < string > [ numTasks ] ;
73
73
for ( int i = 0 ; i < numTasks ; i ++ )
74
74
{
75
- results [ i ] = _nodeJSService . InvokeFromFileAsync < string > ( DUMMY_CONCURRENCY_MODULE ) ;
75
+ results [ i ] = _nodeJSService . InvokeFromFileAsync < string > ( DUMMY_CONCURRENCY_MODULE_FILE ) ;
76
76
}
77
77
78
78
return await Task . WhenAll ( results ) ;
@@ -91,7 +91,7 @@ public void INodeServices_Concurrency_Setup()
91
91
_serviceProvider = services . BuildServiceProvider ( ) ;
92
92
_nodeServices = _serviceProvider . GetRequiredService < INodeServices > ( ) ;
93
93
94
- // Warm up . First run starts a Node.js processes.
94
+ // Warmup . First run starts a Node.js processes.
95
95
_nodeServices . InvokeAsync < DummyResult > ( "dummyLatencyModule.js" , 0 ) . GetAwaiter ( ) . GetResult ( ) ;
96
96
}
97
97
@@ -104,7 +104,7 @@ public async Task<string[]> INodeServices_Concurrency()
104
104
var results = new Task < string > [ numTasks ] ;
105
105
for ( int i = 0 ; i < numTasks ; i ++ )
106
106
{
107
- results [ i ] = _nodeServices . InvokeAsync < string > ( DUMMY_CONCURRENCY_MODULE ) ;
107
+ results [ i ] = _nodeServices . InvokeAsync < string > ( DUMMY_CONCURRENCY_MODULE_FILE ) ;
108
108
}
109
109
110
110
return await Task . WhenAll ( results ) ;
0 commit comments