当前位置: 首页 > 知识库问答 >
问题:

执行元实例数

阎嘉荣
2023-03-14

我对akka-actor是一个新手,对一些问题感到困惑:

  1. 当我创建actorSystem并使用actorOf(Props(ClassOf[AX],...))在main方法中创建actor,我的ActorAX有多少实例?
  2. 如果Q1的答案只有一个,那么这是否意味着我在AX actor类定义中创建的任何数据结构都只会出现在一个线程中,而我不应该关心并发问题?
  3. 如果我执行元的一个操作(receive方法中的一个案例)是一个耗时的任务,并且需要相当长的时间才能完成,该怎么办?在完成该任务之前,我的单个执行元实例是否不会响应?
  4. 如果问题3的答案是正确的,我应该做什么来防止我的演员不响应?我是否应该启动另一个线程并向其发送另一条消息,直到完成任务为止?有没有我应该遵循的最佳实践?

共有1个答案

爱茂勋
2023-03-14

>

  • 是的,每次调用“actor of”方法时,执行元系统只创建一个执行元实例。但是,当使用路由器时,可以创建1个路由器,从而将负载分散到任意数量的参与者。因此,在这种情况下,可以构造多个实例,但“通常”使用actorOf只创建一个实例。

    是的,在actor中,您不必担心并发问题,因为Akka保证任何actor一次只处理一条消息。您必须注意不要以某种方式从执行元外部的代码中更改执行元的状态。因此,无论何时公开actor状态,都要使用不可变的类来执行此操作。案例类在这方面是非常好的。而且要注意在从参与者内部完成未来时修改参与者状态。由于Future在它自己的线程上运行,所以当Future完成时,执行元同时处理下一条消息时,可能会出现并发问题。执行元一次在1个线程上执行,但执行元每次执行时这可能是不同的线程。

    Akka是一个高度并发和分布式的框架,所有的东西都是异步和非阻塞的,您必须在应用程序中做到这一点。Scala和Akka提供了几种解决方案来实现这一点。当您在一个actor中有一个耗时的任务时,您可以将这个耗时的任务委托给另一个actor,使用Futures或使用Scala的'async/await/blocking'。当使用'blocking'时,您会给编译器/运行时一个提示,即完成了一个阻塞操作,并且运行时可能会启动额外的线程以防止线程饥饿。Scala并发编程书是学习这些东西的极好指南。还可以查看并发包ScalaDocs和Scala新手指南。如果参与者真的必须等待耗时的任务完成,那么是的,您的参与者只能在该任务完成时做出响应。但这是一种非常‘请求-响应’的思维方式。试着从这件事中脱身。执行元还可以立即响应,指示任务已启动,并在任务完成后发送附加消息。对于耗时的任务,一定要使用不同的线程池,这样ActorSystem就不会因为所有可用的线程都被耗时的任务用完而被阻塞。对于Future的,您可以提供单独的ExecutionContext(不要为此使用ActorSystem的Dispatch context!),但是通过Akka的配置,您还可以配置某些参与者在不同的线程池上运行。

  •  类似资料:
    • 我正在为Akka应用程序搭建测试,我希望在其中向测试类注入一个actor: 我不愿介绍现阶段键入的Akka;为了简单起见,最好不要更改目标参与者,以便在启动后将其值参数作为消息接收,否则这是一个临时的解决方案。

    • 本文向大家介绍Lua中使用元表(metatable)执行算术类元方法实例,包括了Lua中使用元表(metatable)执行算术类元方法实例的使用技巧和注意事项,需要的朋友参考一下 上一节对元表和元方法有了一个初步的认识,这篇就来举个最简单的例子吧,加深一下印象,也为后续内容做准备。 1.元方法名 Lua其实已经规定好了各种算术操作符的元方法名字,如: __add:加法 __sub:减法 __mul

    • 我有一个Apache Spark应用程序在集群模式下在YARN集群上运行(Spark在此集群上有3个节点)。 当应用程序运行时,Spark UI显示2个执行器(每个执行器在不同的节点上运行)和驱动程序在第三个节点上运行。我希望应用程序使用更多的执行器,所以我尝试添加参数--num executors to Spark submit并将其设置为6。

    • 本文向大家介绍C#执行SQL事务用法实例,包括了C#执行SQL事务用法实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#执行SQL事务用法。分享给大家供大家参考。具体分析如下: 1.通过存储过程。 2.通过C#中提供的Transaction。这里就来演示一下通过C#中提供的Transaction 执行SQL事务。 WebForm3.aspx.cs页面 WebForm3.aspx页面

    • 本文向大家介绍shell中嵌套执行expect命令实例,包括了shell中嵌套执行expect命令实例的使用技巧和注意事项,需要的朋友参考一下 一直都想把expect的操作写到bash脚本里,这样就不用我再写两个脚本来执行了,搞了一下午终于有点小成就,给大家看看吧. 系统:centos 5.x 1.先安装expect 2.脚本内容: 这样写的话,就方便得很多,一个脚本就包括完了.

    • 本文向大家介绍MyBatis执行Sql的流程实例解析,包括了MyBatis执行Sql的流程实例解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了MyBatis执行Sql的流程实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 本博客着重介绍MyBatis执行Sql的流程,关于在执行过程中缓存、动态SQl生成等细节不在本博客中体现