Akka
英文原文:
Software Transactional Memory (STM)
"介入者模子"(Actor模子)树立在自力的、互不搅扰的过程条件下,而且过程形态的改动只能经过给该过程发送音讯来完成。”介入者“(自力过程)的形态是由其本身保持的,可是,过程之间异步的音讯通报方法意味着,挪用方没法获得到目的过程以后的波动形态。关于像银行那样的事务系统来讲,存款和取款操作都需求具有”原子性“,那末”介入者模子“就显得很不合适了。假如你的Akka使用顺序需求完成一个同享形态的模子,用来为挪用方供给一致性的、波动性的形态,软件事务性内存(STM)恰是你所需求的。
STM 供给了一个并发把持机制来管理对同享内存的拜访,应用了这两个观点:悲观和事务,以管理同享并发把持。
- 悲观指的是在假定不会发作错误的状况下,我们并行地履行多个原子操作块。完成这些以后,我们检测这此中能否发作了一些问题。假如没有找就任何问题,那末我们更新原子操作块中的形态变量。假如发明了问题,那末我们回滚而且重试操作。较之其它替换办法来讲,悲观并发机制凡是供给可伸缩度更高的选择。
- 其次,STM的模子构建与数据库事务处置较为类似。在应用STM完成的顺序中,Java的堆便是支撑启动/提交和回滚的事务型数据集。在工具把握内存中的形态的同时,事务机制仅仅完成下面的几个特征:原子性,一致性和隔离。
提交樊篱这一观点被用来使分歧线程上的多个事务可以像一个单一的原子操作块般被管理。
提交樊篱是一种同步辅佐Tools,是在逾越多个线程的一切事务之间,设置一个单一的、配合的樊篱点而生效的。一旦樊篱被触及,一切的事务均将主动提交。这个观点是基于Java的
倒计时锁存器树立的。
Akka的事务处置,是基于
CommitBarrier 方法的,每个介入者(事务成员)的原子操作块都被视为一个完好的,大的旌旗灯号单位。每一个介入者在一切介入成员完成事务之前,都处于梗阻形态。这意味着,即便介入成员可能联系关系多个线程,
CommitBarrier内的原子操作块的一切举措将会作为一个单一原子举措履行。假如任何一个原子操作块抛出异常或发作抵触,一切的
CommitBarrier成员都将回滚。
Akka供给了一个 coordinated 的结构器在事务介入者中和谐事务,coordinated,它以事务在哪开启来定义事务的鸿沟,别的,coordinated.coordinate() 办法用来增加一切将要介入到统一个事务高低文的成员。

两个银行账户间的款项转移
让我们来看一个示例来了解事务成员是怎么介入到事务傍边的。我们将用最根本的两个银行账户款项转移作为示例。 我们有一个 AccountActor 来存储帐户余额和账户号码信息。它有两个操作 –credit (增加钱到账户中) 和 debit (从账户中取钱)。别的,我们有 TransferActor 工具来存储两个AccountActor工具,并在账户上挪用它们的 credit 和debit 操作
为了包管款项在两个银行账户中同步转移,我们需求完成以下几点:
- 在帐户工具上,需求介入到事务傍边的形态常量需求为事务援用类型 (transaction reference type)。
- 在账户工具上的 credit 和 debit 操作需求为原子操作。
- 在传输 (transfer) 工具上,事务的鸿沟必需被对应而且账户工具必需介入到统一个事务高低文中。
- 别的, 我们在 TransferActor 和 BankActor 中定义(supervisor policy) 来处置事务异常
本文中的一切译文仅用于进修和交换目标,转载请务必注明文章译者、出处、和本文链接。
2KB翻译任务按照
CC 协议,假如我们的任务有进犯到您的权益,请实时联络我们。

2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务