标签: actor

什么时候应该使用Actor模型?

应该何时使用Actor模型

它当然不能保证无死锁的环境.

B等待A时,Actor A可以等待来自B的消息.

此外,如果演员在进入下一个任务之前必须确保其消息已被处理,则必须发送消息并等待"您的消息已被处理"消息而不是直接阻止.

模特的力量是什么?

concurrency multithreading functional-programming actor-model actor

41
推荐指数
2
解决办法
8570
查看次数

Swift,演员:演员隔离的属性“扫描”不能从非隔离的上下文中改变

我有一个演员:

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 可以使用它来读取和设置状态?

actor swift swift-concurrency

39
推荐指数
2
解决办法
3万
查看次数

如何将actor消息限制为特定类型?

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等等)的构造.

scala actor akka

38
推荐指数
2
解决办法
5006
查看次数

Scala演员和环境参考

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 actor akka

36
推荐指数
1
解决办法
522
查看次数

Scala模式匹配与Option [Any]的混淆

我有以下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)

scala pattern-matching unchecked actor

33
推荐指数
2
解决办法
3万
查看次数

libgdx精灵和演员之间的区别

我正在阅读关于libgdx的javadoc和各种教程,我正在尝试找出与我类似或在libgdx中提供类似功能的各种概念之间的差异.

起初我认为scene2d是关于创建菜单等交互式项目,但我正在阅读的各种教程使用scene2d/actor作为主要游戏项目(即玩家等),其他人只是使用精灵.

在游戏中使用Sprite和Actor(即scene2D)之间的区别究竟是什么?你应该在什么时候选择?

谢谢.

sprite actor libgdx

33
推荐指数
1
解决办法
2万
查看次数

阻止Akka Actors中的呼叫

作为一个新手,我试图了解演员的工作方式.而且,从文档中,我认为我理解actor是以同步模式执行的对象,并且actor执行可以包含阻塞/同步方法调用,例如db请求

但是,我不明白的是,如果你编写一个内部有一些阻塞调用的actor(比如阻塞查询执行),它会搞乱整个线程池(从某种意义上说cpu利用率会下降等等) ), 对 ?我的意思是,根据我的理解,如果/当演员进行阻止调用时,JVM无法理解它是否可以将该线程切换到其他人.

因此,考虑到并发的性质,演员不应该做任何阻塞调用吗?

如果是这种情况,那么建议的非阻塞/异步调用方法是什么,让我们说一个Web服务调用可以获取内容并在该请求完成时向另一个actor发送消息?我们应该只使用演员内部的东西:

未来地图{response => x!响应

这是处理这个问题的正确方法吗?

如果你能为我澄清这一点,我将不胜感激.

concurrency multithreading scala actor akka

30
推荐指数
2
解决办法
1万
查看次数

Scala actor可以同时处理多条消息吗?

回复到我最近的问题表明,一个演员处理其消息一次一个.这是真的?我没有看到任何明确说明(在Scala编程),其中包含以下代码段(第593页)

如果[ react方法]找到可以处理的消息,[it]将调度该消息的处理以便以后执行并抛出异常

(强调我自己).两个相关(和互斥)的问题:

  1. 假设演员可以同时处理多个消息,我怎样才能强制演员一次处理消息1(如果这是我想做的话)?(用receive?)
  2. 假设一个actor一次处理一个消息,我怎样才能最好地实现一个实际上可以同时处理消息的actor

编辑:做一些测试似乎证明我错了,演员确实是连续的.所以问题#2我需要回答

concurrency scala actor

28
推荐指数
2
解决办法
5178
查看次数

我如何在Akka工作?

当您需要执行I/O(即数据库操作)时,actor模型(在Akka中)如何工作?

我的理解是,阻塞操作会引发异常(并且由于Akka使用的Netty的自然性质而基本上破坏了所有并发性).因此我将不得不使用Future或类似的东西 - 但我不理解并发模型.

  1. 1个演员可以同时处理多个消息吗?
  2. 如果一个actor在一个future(即.future.get())中进行了一个阻塞调用,它只会阻止当前actor的执行; 还是会阻止所有参与者的执行,直到阻止呼叫完成?
  3. 如果它阻止所有执行,那么使用未来辅助并发(即,将来不会调用阻塞调用仍然等于创建一个actor并执行阻塞调用)?
  4. 处理多阶段进程的最佳方法是什么(即从数据库中读取;调用阻塞的Web服务;从数据库中读取;写入数据库)每个步骤依赖于最后一步?

基本情况是这样的:

  • 我正在使用Websocket服务器,它将维护数千个会话.
  • 每个会话都有一些状态(即身份验证详细信息等);
  • Javascript客户端将向服务器发送JSON-RPC消息,该消息将把它传递给相应的会话actor,后者将执行它并返回结果.
  • 执行RPC调用将涉及一些I/O和阻塞调用.
  • 将会有大量并发请求(每个用户将通过WebSocket连接发出大量请求,并且会有很多用户).

有没有更好的方法来实现这一目标?

scala scalability websocket actor akka

28
推荐指数
2
解决办法
7606
查看次数

Scala final vs val用于并发可见性

在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中使用这些对象时)?

concurrency visibility scala final actor

28
推荐指数
1
解决办法
9869
查看次数