LoginSignup
0
0

TL;DR

内部でスリープするようなFutureのインスタンスを、
Java 21のVirtual ThreadおよびPlatfrom Threadから作成し、
処理にかかった時間を出してみました。

Platfrom Thread

まずはscala.concurrent.ExecutionContext.Implicits.globalを使って、
1秒スリープするFutureのインスタンスを50個作ってみました。

結果はコメントに記載の通り7726msかかりました。

import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration.Duration
import scala.concurrent.{Await, Future}

object Main extends App {
  val start = System.currentTimeMillis()

  val futures = (1 to 50).map { _ =>
    Future{
      Thread.sleep(1000)
    }
  }

  Await.ready(Future.sequence(futures), Duration.Inf)

  val end = System.currentTimeMillis()
  println(s"${end - start}ms") // 7726ms
}

Virtual Thread

同じ条件でVirtual Threadを使って、
スリープするFutureのインスタンスを50個作った結果、1141msかかりました。

少々荒っぽい試し方ですが、スレッドがスリープ処理によって占有されていないことが示唆されますね。

import java.util.concurrent.Executors
import scala.concurrent.duration.Duration
import scala.concurrent.{Await, ExecutionContext, Future}

object VirtualThreadTest extends App {
   implicit val ec: ExecutionContext = ExecutionContext.fromExecutor(Executors.newVirtualThreadPerTaskExecutor())

  val start = System.currentTimeMillis()

  val futures = (1 to 50).map { _ =>
    Future{
      Thread.sleep(1000)
    }
  }

  Await.ready(Future.sequence(futures), Duration.Inf)

  val end = System.currentTimeMillis()
  println(s"${end - start}ms") // 1141ms
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0