应该何时使用Actor模型?
它当然不能保证无死锁的环境.
B等待A时,Actor A可以等待来自B的消息.
此外,如果演员在进入下一个任务之前必须确保其消息已被处理,则必须发送消息并等待"您的消息已被处理"消息而不是直接阻止.
模特的力量是什么?
concurrency multithreading functional-programming actor-model actor
我有一个演员:
actor StatesActor {
var job1sActive:Bool = false
...
}
Run Code Online (Sandbox Code Playgroud)
我有一个使用该演员的对象:
class MyObj {
let myStates = StatesActor()
func job1() async {
myStates.job1IsActive = true
}
}
Run Code Online (Sandbox Code Playgroud)
线:
myStates.job1IsActive = true
出现以下错误:
演员隔离属性“job1IsActive”无法从非隔离上下文中发生突变
如何使用 actor 正确存储/读取状态信息,以便 MyObj 可以使用它来读取和设置状态?
在Akka中,除了使用使用RPC样式编程模型的"Typed Actor"API之外,有没有办法将actor限制为特定的静态类型?
我可以在Akka中使用消息传递样式而不会在actor边界处丢弃静态类型安全吗?
例如,我想使用这样的代码:
sealed abstract class FooMessage
case object Foo extends FooMessage
case object Bar extends FooMessage
class FooActor extends Actor[FooMessage] {
def receive = {
case Foo => () // OK
// Would raise a compiler error:
// case s: String => error("Can't happen, String is not a subtype of FooMessage")
}
}
val fooActor = actorOf[FooActor]
fooActor ! Foo // OK
// Won't compile:
fooActor ! "Hello"
Run Code Online (Sandbox Code Playgroud)
也许人们必须扩展一些基本特征或者具有Either允许系统级消息(Exit等等)的构造.
在Phillip Haller的博士论文中,他在(5.1未来工作)部分提到,研究的一个有趣领域是扩展框架与环境参考,他引用了Van Cutsen的论文.
摘抄:
Scala Actors库包括一个运行时系统,它为远程(即VM间)actor参与者提供基本支持.为了提供对容错的支持(例如,在移动ad-hoc网络中),使用支持volatile连接的远程actor引用来扩展框架会很有趣,类似于环境引用[36].将容错分布式编程(例如,[52,142])的事务抽象集成到Scala Actors中是未来工作的另一个有趣领域.
引用的纸张是:
[36] Tom Van Cutsem,Jessie Dedecker,Stijn Mostinckx,Elisa Gonzalez Boix,Theo D'Hondt和Wolfgang De Meuter.环境参考:寻址移动网络中的对象.[...]第986-997页.ACM,2006年10月.
这是阿卡做的吗?如果没有,考虑到Akka今天存在的事实,你认为它仍然与研究这个领域有关吗?
我有以下Scala代码.
import scala.actors.Actor
object Alice extends Actor {
this.start
def act{
loop{
react {
case "Hello" => sender ! "Hi"
case i:Int => sender ! 0
}
}
}
}
object Test {
def test = {
(Alice !? (100, "Hello")) match {
case i:Some[Int] => println ("Int received "+i)
case s:Some[String] => println ("String received "+s)
case _ =>
}
(Alice !? (100, 1)) match {
case i:Some[Int] => println ("Int received "+i)
case s:Some[String] => println ("String received …Run Code Online (Sandbox Code Playgroud) 我正在阅读关于libgdx的javadoc和各种教程,我正在尝试找出与我类似或在libgdx中提供类似功能的各种概念之间的差异.
起初我认为scene2d是关于创建菜单等交互式项目,但我正在阅读的各种教程使用scene2d/actor作为主要游戏项目(即玩家等),其他人只是使用精灵.
在游戏中使用Sprite和Actor(即scene2D)之间的区别究竟是什么?你应该在什么时候选择?
谢谢.
作为一个新手,我试图了解演员的工作方式.而且,从文档中,我认为我理解actor是以同步模式执行的对象,并且actor执行可以包含阻塞/同步方法调用,例如db请求
但是,我不明白的是,如果你编写一个内部有一些阻塞调用的actor(比如阻塞查询执行),它会搞乱整个线程池(从某种意义上说cpu利用率会下降等等) ), 对 ?我的意思是,根据我的理解,如果/当演员进行阻止调用时,JVM无法理解它是否可以将该线程切换到其他人.
因此,考虑到并发的性质,演员不应该做任何阻塞调用吗?
如果是这种情况,那么建议的非阻塞/异步调用方法是什么,让我们说一个Web服务调用可以获取内容并在该请求完成时向另一个actor发送消息?我们应该只使用演员内部的东西:
未来地图{response => x!响应
这是处理这个问题的正确方法吗?
如果你能为我澄清这一点,我将不胜感激.
回复到我最近的问题表明,一个演员处理其消息一次一个.这是真的?我没有看到任何明确说明(在Scala中编程),其中包含以下代码段(第593页)
如果[
react方法]找到可以处理的消息,[it]将调度该消息的处理以便以后执行并抛出异常
(强调我自己).两个相关(和互斥)的问题:
receive?)编辑:做一些测试似乎证明我错了,演员确实是连续的.所以问题#2我需要回答
当您需要执行I/O(即数据库操作)时,actor模型(在Akka中)如何工作?
我的理解是,阻塞操作会引发异常(并且由于Akka使用的Netty的自然性质而基本上破坏了所有并发性).因此我将不得不使用Future或类似的东西 - 但我不理解并发模型.
future(即.future.get())中进行了一个阻塞调用,它只会阻止当前actor的执行; 还是会阻止所有参与者的执行,直到阻止呼叫完成?基本情况是这样的:
有没有更好的方法来实现这一目标?
在Java中,当跨多个线程(通常)使用对象时,最好将字段设为final.例如,
public class ShareMe {
private final MyObject obj;
public ShareMe(MyObject obj) {
this.obj = obj;
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,obj的可见性将在多个线程中保持一致(假设obj具有所有最终字段),因为它是使用final关键字安全构造的.
在scala中,它不会出现val编译到最终引用,而是val是scala中的语义,阻止您重新分配变量(构造函数中的Scala最终变量).如果scala构造函数变量未定义为final,它们是否会遇到同样的问题(在actor中使用这些对象时)?
actor ×10
scala ×7
akka ×4
concurrency ×4
actor-model ×1
final ×1
libgdx ×1
scalability ×1
sprite ×1
swift ×1
unchecked ×1
visibility ×1
websocket ×1