@@ -86,15 +86,28 @@ class ForkJoinExecutorConfigurator(config: Config, prerequisites: DispatcherPrer
86
86
}
87
87
88
88
class ForkJoinExecutorServiceFactory (
89
+ val id : String ,
89
90
val threadFactory : ForkJoinPool .ForkJoinWorkerThreadFactory ,
90
91
val parallelism : Int ,
91
92
val asyncMode : Boolean ,
92
- val maxPoolSize : Int )
93
+ val maxPoolSize : Int ,
94
+ val virtualize : Boolean )
93
95
extends ExecutorServiceFactory {
96
+ def this (threadFactory : ForkJoinPool .ForkJoinWorkerThreadFactory ,
97
+ parallelism : Int ,
98
+ asyncMode : Boolean ,
99
+ maxPoolSize : Int ,
100
+ virtualize : Boolean ) =
101
+ this (null , threadFactory, parallelism, asyncMode, maxPoolSize, virtualize)
102
+
103
+ def this (threadFactory : ForkJoinPool .ForkJoinWorkerThreadFactory ,
104
+ parallelism : Int ,
105
+ asyncMode : Boolean ) = this (threadFactory, parallelism, asyncMode, ForkJoinPoolConstants .MaxCap , false )
94
106
95
107
def this (threadFactory : ForkJoinPool .ForkJoinWorkerThreadFactory ,
96
108
parallelism : Int ,
97
- asyncMode : Boolean ) = this (threadFactory, parallelism, asyncMode, ForkJoinPoolConstants .MaxCap )
109
+ asyncMode : Boolean ,
110
+ maxPoolSize : Int ) = this (threadFactory, parallelism, asyncMode, maxPoolSize, false )
98
111
99
112
private def pekkoJdk9ForkJoinPoolClassOpt : Option [Class [_]] =
100
113
Try (Class .forName(" org.apache.pekko.dispatch.PekkoJdk9ForkJoinPool" )).toOption
@@ -116,12 +129,19 @@ class ForkJoinExecutorConfigurator(config: Config, prerequisites: DispatcherPrer
116
129
def this (threadFactory : ForkJoinPool .ForkJoinWorkerThreadFactory , parallelism : Int ) =
117
130
this (threadFactory, parallelism, asyncMode = true )
118
131
119
- def createExecutorService : ExecutorService = pekkoJdk9ForkJoinPoolHandleOpt match {
120
- case Some (handle) =>
121
- handle.invoke(parallelism, threadFactory, maxPoolSize,
122
- MonitorableThreadFactory .doNothing, asyncMode).asInstanceOf [ExecutorService ]
123
- case _ =>
124
- new PekkoForkJoinPool (parallelism, threadFactory, MonitorableThreadFactory .doNothing, asyncMode)
132
+ def createExecutorService : ExecutorService = {
133
+ val forkJoinPool = pekkoJdk9ForkJoinPoolHandleOpt match {
134
+ case Some (handle) =>
135
+ handle.invoke(parallelism, threadFactory, maxPoolSize,
136
+ MonitorableThreadFactory .doNothing, asyncMode).asInstanceOf [ExecutorService ]
137
+ case _ =>
138
+ new PekkoForkJoinPool (parallelism, threadFactory, MonitorableThreadFactory .doNothing, asyncMode)
139
+ }
140
+ if (virtualize) {
141
+ new VirtualizedExecutorService (id, forkJoinPool)
142
+ } else {
143
+ forkJoinPool
144
+ }
125
145
}
126
146
}
127
147
@@ -143,12 +163,14 @@ class ForkJoinExecutorConfigurator(config: Config, prerequisites: DispatcherPrer
143
163
}
144
164
145
165
new ForkJoinExecutorServiceFactory (
166
+ id,
146
167
validate(tf),
147
168
ThreadPoolConfig .scaledPoolSize(
148
169
config.getInt(" parallelism-min" ),
149
170
config.getDouble(" parallelism-factor" ),
150
171
config.getInt(" parallelism-max" )),
151
172
asyncMode,
152
- config.getInt(" maximum-pool-size" ))
173
+ config.getInt(" maximum-pool-size" ),
174
+ config.getBoolean(" virtualize" ))
153
175
}
154
176
}
0 commit comments