跳到主要内容
JDK 17+Scala 3.3+High Performance

Otavia

一个高性能的 Scala 3 IO & Actor 编程模型

使用零成本抽象、编译时类型安全的消息传递和强大的基于 Netty 的 IO 栈构建可扩展的并发应用程序。

PingPong.scala
// Define messages with type safety
case class Ping(id: Int) extends Ask[Pong]
case class Pong(id: Int) extends Reply

// Actors handle messages asynchronously
class PingActor(pong: Address[Ping])
extends StateActor[Start] {
def resumeNotice(stack) = stack.state match {
case StartState =>
pong.ask(Ping(1))
stack.suspend(FutureState())
case s: FutureState[Pong] =>
println("Pong received: " + s.future.getNow.toString)
stack.return()
}
}

// Build and run
val system = ActorSystem()
val pong = system.buildActor(() => PongActor())
val ping = system.buildActor(() => PingActor(pong))
ping.notice(Start(1))

为什么选择 Otavia?

为高性能 Scala 构建,具有独特功能

零成本 Ask 模式

发送 ask 消息并获得回复就像调用方法。热路径无 Future 开销,无内存分配。

T

Type-Safe Messaging

Actor 之间的消息传递在编译时是类型安全,在运行前捕获错误。

async

Stack Coroutines

通过 Scala 3 元编程实现基于 CPS 的 async/await。顺序代码,异步性能。

No More Locks

单线程 Actor 意味着无竞态条件、无死锁、无线程安全烦恼。

IOC for Actors

ActorSystem 也是 IOC 容器,编译时类型安全地自动装配依赖的 Actor。

Netty IO Stack

从 Netty 移植,支持 AIO 和文件通道,利用丰富的 Netty 编解码器生态。

Object Pooling

热路径使用对象池实现零成本抽象。数百万 Actor,十亿条消息。

Zero Dependencies

核心模块只依赖 Scala 和 JDK,纯粹、可移植、可预测。

为什么选择 Otavia?

传统线程模型

  • 复杂的线程管理
  • 竞态条件和死锁
  • 阻塞降低性能
  • 难以理解

使用 Otavia

  • 单线程 Actor 模型
  • 无需锁
  • 零成本异步
  • 编译时类型安全

准备好开始了吗?

查阅文档了解更多关于 Otavia 的信息,开始构建您的第一个基于 Actor 的应用程序。