Akka手册译(一)——术语与概念

为了定义一个无歧义的称之为'Akka'的并发、分布式通迅系统,在这一章里我们打算约定一些标准的术语。然而,需要注意这些术语的定义仅用于此文,它们在别的文献可能有其它含义。因此这些术语适用范围约束仅在'Akka'的文档内。

并发与并行

并发和并行是相关的概念,但有小的差异。并发意味两个或更多作业将要处理,并不表示它们会同时执行。就比如说我们将所有作业的可分为多个时间切片段,即可以按时间顺序执行下去,也可以在一定情况下跳跃到其它作业上混合执行。并行则强调了作业执行的同时性。

异步与同步

我们所熟知的同步方法是指方法调用后会出现返回值或抛出异常否则无法继续执行的方法调用。另一方面,异步方法是指允许调用者处理其它有限的步骤,并可能通过其它机制发送相关信号完成方法 。(它可能是某种注册的回调,预期或一个消息)
打算同步的API并没有必要通过阻塞实现同步。具有集中任务的特定CPU可以用同样的行为做为阻塞。一般来说为使系统可以持继运行,首选采用异步API。Actor是天生异步的。每个actor在发送消息后并不需要等待被交付后再处理。

非阻塞和阻塞

我们指的阻塞是指能引起其它线程无限延迟的一个延迟的线程。典型的例子是只使用一个线程的互诉操作。如果线程独占资源(比如意外执行无限循环)其它线程装只能等待而不能处理。相对而言,非阻塞是指没有线程能无限延迟其它线程。
由于对整个系统而言,包含阻塞是非常不确定的因些非阻塞操作优于阻塞。

死锁、互拆等待和活锁

死锁出现在几个参与者相互等待达到一个特定的状态才能继续处理。由于没有参与者能其他参与考达到特定状态时继续处理,所有的子系统都将停滞。(如同Catch-22问题)死锁阻塞密切相关,参与者的线程能够推迟其他线程的处理是非常必要的功能。
在死锁时其实是互拆等待状态,参与者无法继续处理,他们中能继续处理而实际没有实际处理。典型场景是调度算法单纯的总是在低优先级的任务中选择高优先级任务。如果传入的高优先级任务的数量足够高,那么低优先级的任务将完成。
与死锁类似的是,活锁也没有参与者执行处理。而与死锁不同的是参与者不变改变自已的状态,而不是等待别人改变状态。比如有两个参与者和及两个相同的资源。它们都试图得到资源,同时也检查对方也需要资源。如果另一个参与者已请求资源,它们则试图得到另一个资源的实例。而也有不幸的情况,两个参与者在两个资源间互相“弹”开,屈从于对方而从不获得资源。

竞态选择

我们把一组假定有顺序的事件受外部不确定事件影响而紊乱的情况称为竞态选择。竞态选择时常常出现在多个线程共享可变状态,是操作的线程状态可能是交叉造成意想不到的行为。虽然常见的情况下共享状态没有必要成为竞态选择。举个例子一个客户端发送无序数据包(例如UDP数据包)P1,P2到服务器。数据包在传输时可能经过不同路由的网络线路,服务器可能首先收到P2,再收到P1 。如果消息中不含发送时的顺序信息,那么服务器将无法确定发送的顺序。依据数据包就引起了竞态选择。
注意
Akka提供的actor传递消息的机制保证的顺序是不变的。参见消息传递的可靠性。

非阻塞类别(处理的策略)

前面几节中谈到引起系统中死锁和吞吐量降低的危险是阻塞不受欢迎的几个原因。下文我们将讨论各种非阻塞特点。

无等待

无等待方面是指每个调用确保用有限的步骤完成。只要方法是有限的无等待那么完成步骤的数量是必有上限。
从这个定义看无等待方法从未被阻塞,因此不会发生死锁。此外,每个参与者可以有限的步骤之后(当调用完成)执行,无等待没有竞态选择。

无锁定

无锁定的性能弱于无等待。在无锁定的情况下,绝大多数情况是部分方法在有限的步骤内完成。这个定义意味着非死锁可能被无锁定调用。另一方面,一些有限步骤调用完成前无法保证它们最终完成。换句话说,无锁定并无法保证没有竞态选择。

无阻碍

无阻碍这里讨论的最弱的非阻塞保证。无阻碍是指在它有限的步骤中开始执行后一个时间点进行隔离(其它线程没有步骤,好比是挂起)。所有的无锁定对象是无阻碍的,这是一个充分条件。
乐观并发控制(OCC)方法通常属于无阻碍。OCC方法是指每个参与者试图共享对象上执行的操作,但如果某一个参与者发现和别人冲突则回滚的修改,根据调度再次尝试。如果在一个时间点上参与者是唯一一个则操作成功。

下一篇

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 一.线程安全性 线程安全是建立在对于对象状态访问操作进行管理,特别是对共享的与可变的状态的访问 解释下上面的话: ...
    黄大大吃不胖阅读 828评论 0 3
  • 1.解决信号量丢失和假唤醒 public class MyWaitNotify3{ MonitorObject m...
    Q罗阅读 871评论 0 1
  • 一、进程和线程 进程 进程就是一个执行中的程序实例,每个进程都有自己独立的一块内存空间,一个进程中可以有多个线程。...
    阿敏其人阅读 2,606评论 0 13
  • Java SE 基础: 封装、继承、多态 封装: 概念:就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽...
    Jayden_Cao阅读 2,099评论 0 8
  • 市面上也有很多店在卖鲜芋仙,但是味道都比较偏甜,那如果不想吃这么甜的就只能自己动手做了,其实做法倒也不算太难,不过...
    悠然小虾阅读 361评论 0 2