使用Scala Actors代替JMS有什么区别?
例如,从性能和可伸缩性的角度来看,与JMS相比,Scala
Actor模型增加了什么?在哪种情况下,使用Actor而不是JMS更有意义,即Actor解决了JMS无法解决的哪些问题?
JMS和Scala参与者在理论上有相似之处,但他们认为它们并不一定在架构上解决相同的问题。参与者本来是共享内存并发的轻量级替代品,在共享内存并发中,种族和僵局通常更容易被意外创建。JMS是一种复杂的API,旨在跨越直接消息传递,发布/订阅,事务,EJB集成等。
与参与者最接近的JMS将是由非持久,非事务,非发布/订阅队列支持的消息驱动Bean。我将其称为“简单的JMS bean”。
现在,您的问题。
由于JMS是规范而非实现,因此性能很难谈论。但是,当使用简单的JMS
bean时,我希望性能大致相似,并且在时间和内存方面可能比actor略有优势。当您向JMS添加诸如发布/订阅,事务等功能时,性能自然会进一步下降,但是您正在尝试将苹果与桔子进行比较。
至于可伸缩性,简单的JMS Bean的扩展方式应与参与者几乎完全相同。将事务添加到JMS组合中,自然会在一定程度上损害可伸缩性,具体取决于事务的范围。
参与者做什么,JMS不能做的更广泛的问题。好吧,如果没有内置的pub sub或事务,似乎参与者会从JMS中减去-
大致上是正确的。事情就是这样:参与者只需要很少的代码,我可以很高兴地将它们用于非常细粒度的并发。在普通的Java代码中,我可能会说:“我不想像JMS及其依赖关系或它所需要的代码那样搞糟,所以我只是产生一个线程,使用一个锁并共享一个数据结构。”
与Scala演员一起,我更有可能说“我会鞭打一个演员继续前进”。
在设计上也有哲学上的差异。参与者具有一个简单的内置主管层次结构概念。角色通常用于“让它崩溃”设计中。如果某个演员死于某种原因,那么另一个演员负责决定如何处理,例如重新启动该演员,杀死一群演员并重新启动所有演员,或者杀死一群演员及其本身,以便其他演员可以处理问题。这种东西可以附加到JMS上,但是它不是API的核心,必须以某种方式从外部进行管理。
顺便说一下,对于一个Scala
actor库,它可以更深入地进入JMS涵盖的领域,请参见Akka。Akka还为许多常见的参与者层次策略带来了一种声明式方法。
问题内容: 偏重于继承而不是继承 是非常流行的短语。我读了几篇文章,最后每篇文章都说 当类之间存在纯IS-A关系时,请使用继承。 本文中的一个示例: 在 Apple 和 Fruit 之间存在明显的IS-A关系,即Apple IS-A Fruit,但作者也将其显示为Apple HAS-A Fruit(组成),以显示通过继承实现时的陷阱。 我在这里变得有些困惑,声明的含义是什么 当类之间存在纯IS-A
C# 有两种常量:编译时常量和运行时常量。它们有不同的行为,不当使用会花费性能或出现错误。如果不得不选择其中一个,宁可是一个慢一点但正确的程序,而不是一个快速但会出错的程序。出于这个考虑,你应该更偏向于运行时常量而不是编译时常量。编译时常量会比编译时常量稍微快点,但更不灵活。只有当性能是一个致命因素而且要求常量不随版本发生改变时才会保留编译时常量。 你可以使用 readonly 关键字声明运行时常
1.什么是UI、UX、交互? UI:User Interface 用户界面 泛指用户软件的操作界面,UI设计主要指界面的样式,美观程度。 UE or UX: User Experience 用户体验 人与系统交互时的感觉就是用户体验,用户体验指用户在使用产品过程中的个人主观感受。 IXD:Interaction design 交互设计 交互指任何机器互动的过程,交互设计通过了解人的心理、目标和期望
问题内容: 为什么或者为什么不? 问题答案: 对于性能而言,尤其是在较大范围内进行迭代时,通常会更好。但是,在某些情况下,你可能更喜欢: 在Python 3,range()做什么用做的,不存在。如果要编写可在Python 2和Python 3上运行的代码,则不能使用。 在某些情况下实际上可以更快-例如。如果多次重复相同的序列。 xrange()每次都必须重新构造整数对象,但是range()将拥有真
如果你好奇 Flask 为什么用它的方式做事情,而不是别的方法,那么这节是为你准 备的。这节应该给你一些设计决策的想法,也许起初是武断且令人惊讶的,特别是 直接与其它框架相比较。 显式的应用对象 一个基于 WSGI 的 Python web 应用必须有一个中央的可调用对象来实现实际的应 用。在 Flask 中,这是一个 Flask 类的实例。每个 Flask 应用 必须创建一个该类的实例,并传给它
我有一个应用程序,我的任务是设计一个mongo支持的数据存储。 应用程序的目标是以最快的加载时间提供最新数据(无陈旧数据)。 数据大小约为数百万,应用程序写入量很大。 在选择给定3节点副本集(1个主副本集、1个辅助副本集、1个仲裁服务器)的读取策略时,我遇到了两种不同的策略来确定从哪里读取源- > 从次级读取以减少主级的负载。使用,从而确保写入在主级和次级上都完成。设置读取首选项。到。 总是从小学