chore: Proper test virtual thread dispatcher and update doc. (#1728)
This commit is contained in:
parent
e8229cc59d
commit
e5d766bbf1
6 changed files with 15 additions and 7 deletions
|
|
@ -34,7 +34,7 @@ object VirtualThreadPoolDispatcherSpec {
|
|||
|
||||
override def receive = {
|
||||
case "ping" =>
|
||||
sender() ! "All fine"
|
||||
sender() ! Thread.currentThread().getName
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -43,14 +43,16 @@ object VirtualThreadPoolDispatcherSpec {
|
|||
class VirtualThreadPoolDispatcherSpec extends PekkoSpec(VirtualThreadPoolDispatcherSpec.config) with ImplicitSender {
|
||||
import VirtualThreadPoolDispatcherSpec._
|
||||
|
||||
val Iterations = 1000
|
||||
|
||||
"VirtualThreadPool support" must {
|
||||
|
||||
"handle simple dispatch" in {
|
||||
val innocentActor = system.actorOf(Props(new InnocentActor).withDispatcher("virtual-thread-dispatcher"))
|
||||
innocentActor ! "ping"
|
||||
expectMsg("All fine")
|
||||
for (_ <- 1 to 1000) {
|
||||
innocentActor ! "ping"
|
||||
expectMsgPF() { case name: String =>
|
||||
name should include("VirtualThreadPoolDispatcherSpec-virtual-thread-dispatcher-virtual-thread-")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -417,7 +417,7 @@ final class VirtualThreadExecutorConfigurator(config: Config, prerequisites: Dis
|
|||
val tf: ThreadFactory = threadFactory match {
|
||||
case MonitorableThreadFactory(name, _, contextClassLoader, exceptionHandler, _) =>
|
||||
new ThreadFactory {
|
||||
private val vtFactory = newVirtualThreadFactory(name)
|
||||
private val vtFactory = newVirtualThreadFactory(name + "-" + id)
|
||||
|
||||
override def newThread(r: Runnable): Thread = {
|
||||
val vt = vtFactory.newThread(r)
|
||||
|
|
@ -426,7 +426,7 @@ final class VirtualThreadExecutorConfigurator(config: Config, prerequisites: Dis
|
|||
vt
|
||||
}
|
||||
}
|
||||
case _ => VirtualThreadSupport.newVirtualThreadFactory(prerequisites.settings.name);
|
||||
case _ => VirtualThreadSupport.newVirtualThreadFactory(prerequisites.settings.name + "-" + id);
|
||||
}
|
||||
new ExecutorServiceFactory {
|
||||
import VirtualThreadSupport._
|
||||
|
|
|
|||
|
|
@ -68,6 +68,7 @@ private[dispatch] object VirtualThreadSupport {
|
|||
newThreadPerTaskExecutorMethod.invoke(threadFactory).asInstanceOf[ExecutorService]
|
||||
} catch {
|
||||
case NonFatal(e) =>
|
||||
// --add-opens java.base/java.lang=ALL-UNNAMED
|
||||
throw new UnsupportedOperationException("Failed to create newThreadPerTaskExecutor.", e)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,6 +42,8 @@ allocated by the ForkJoinPool. It is a setting specifically talking about the nu
|
|||
threads the pool keep running in order to reduce the latency of handling a new incoming task.
|
||||
You can read more about parallelism in the JDK's [ForkJoinPool documentation](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ForkJoinPool.html).
|
||||
|
||||
When Running on Java 9+, you can use `maximum-pool-size` to set the upper bound on the total number of threads allocated by the ForkJoinPool.
|
||||
|
||||
@@@
|
||||
|
||||
Another example that uses the "thread-pool-executor":
|
||||
|
|
|
|||
|
|
@ -127,6 +127,8 @@ allocated by the ForkJoinPool. It is a setting specifically talking about the nu
|
|||
threads the pool will keep running in order to reduce the latency of handling a new incoming task.
|
||||
You can read more about parallelism in the JDK's [ForkJoinPool documentation](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ForkJoinPool.html).
|
||||
|
||||
When Running on Java 9+, you can use `maximum-pool-size` to set the upper bound on the total number of threads allocated by the ForkJoinPool.
|
||||
|
||||
@@@
|
||||
|
||||
@@@ note
|
||||
|
|
|
|||
|
|
@ -290,6 +290,7 @@ object PekkoBuild {
|
|||
UsefulTask("testQuick",
|
||||
"Runs all the tests. When run multiple times will only run previously failing tests (shell mode only)"),
|
||||
UsefulTask("testOnly *.AnySpec", "Only run a selected test"),
|
||||
UsefulTask("TestJdk9 / testOnly *.AnySpec", "Only run a Jdk9+ selected test"),
|
||||
UsefulTask("testQuick *.AnySpec",
|
||||
"Only run a selected test. When run multiple times will only run previously failing tests (shell mode only)"),
|
||||
UsefulTask("testQuickUntilPassed", "Runs all tests in a continuous loop until all tests pass"),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue