- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在没有 Akka 的情况下实现简单的 Actor?对于许多(非固定计数)actor 实例、绿色线程、IoC(生命周期、基于 Props 的工厂、ActorRef 的)、监督、背压等,我不需要高性能。只需要顺序性(队列)+ 处理程序 + 状态+ 消息传递。
作为副作用,我实际上需要基于actor的小型管道(带有递归链接)+一些并行actor来优化DSP算法计算。它将在没有传递依赖的库中,所以我不想(也不能因为它是一个 jar 插件)插入用户创建和传递 akkaSystem
,该库应具有尽可能简单和轻量级的界面。我不需要 IoC,因为它只是一个库(一组函数),而不是一个框架——因此它的算法复杂性比结构复杂。但是,我认为 Actor 是描述协议(protocol)的好工具,实际上我可以将算法分解为少量异步交互的实体,因此它符合我的需求。
为什么不是 Akka
Akka 很重,这意味着:
jstack
调试 akka 的绿色线程也可能更难。/jconsole
/jvisualvm
,因为一个actor可以作用于任何线程。 最佳答案
这是 JVM 世界中最小且最高效的 actor,其 API 基于 Viktor Klang 的 Minimalist Scala actor:
https://github.com/plokhotnyuk/actors/blob/41eea0277530f86e4f9557b451c7e34345557ce3/src/test/scala/com/github/gist/viktorklang/Actor.scala
它使用起来方便且安全,但在接收消息时类型不安全,并且无法在进程或主机之间发送消息。
主要特点:
Stay
、Become
和 Die
):https://github.com/plokhotnyuk/actors/blob/41eea0277530f86e4f9557b451c7e34345557ce3/src/test/scala/com/github/gist/viktorklang/Actor.scala#L28-L30 new String()
在 JVM 堆中花费相同数量的字节):https://github.com/plokhotnyuk/actors/blob/41eea0277530f86e4f9557b451c7e34345557ce3/out0.txt#L449 def process(self: Address, msg: Any, state: Int): Effect = if (state > 0) {
println(msg + " " + state)
self ! msg
Become { msg =>
process(self, msg, state - 1)
}
} else Die
val actor = Actor(self => msg => process(self, msg, 5))
scala> actor ! "a"
a 5
scala> a 4
a 3
a 2
a 1
关于scala - 如何在没有 Akka 的情况下实现 Actor 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27657970/
我是一名优秀的程序员,十分优秀!