(大部分为翻译)

Concurrency vs. Parallelism 并发 vs 并行
 
并发并不一定同时运行,比如使用时间片,使得两个任务交替执行。而并行是执两个任务真正的同时执行。
 
 
Asynchronous vs. Synchronous   同步 vs 异步  
 
如果一个方法被调用后,调用者只能等到此方法返回值或抛出异常才能继续前进,那这个方法就被称为是“同步”的。
而“异步”调用,是指调用者在经历有限的步骤之后,可以继续前进。方法的完成可以通过其它的机制进行通知,比如Callback, Future, 或者消息。
 
一个同步的API可以使用阻塞来实现同步,但这不是必须的。比如一个CPU密集型的任务的行为会类似于阻塞。通常,使用异步API更好,因为它能保证系统能够继续前进下去。Actor在本质上是异步的:  Actor在发送完一个消息以后会继续执行,而不用等到消息真的投递出去。
 
 
Non-blocking vs. Blocking 阻塞 vs. 非阻塞
 
阻塞是说一个线程可以无限期地延迟另一个线程的执行。比如使用互拆锁。非阻塞是说没有线程能够无限地阻塞其它线程。
 
Deadlock vs. Starvation vs. Live-lock 死锁、饥饿、活锁
 
死锁是说一些参与者互相等待其它人到达一个指定的状态,这样它们才能前进。但是在其它人到达一个指定状态前,没有任何一个能前进,所以所有受影响的子系统都停止了。死锁和“阻塞”紧密联系,因为发生死锁必须得是一个参与者线程能够无限阻塞其它线程前进。
 
在死锁状态下,没有任保一个参与者能够前进。但是饥饿却是有些参与者能前进,但是有些就不能。比如优先级调度算法时,如果高优先级的任务特别多,低优先级的就永远轮不到执行。
 
活锁和死锁有些类似,在于没有任何参与者能前进。但是这些参与者的状态的确是在改变,而不是由于互相等待而永远不变。一个活锁发生的情形是:两个参与者互相检测对方的状态,来获取两个资源中的一个。当它们中的一个检测到另一个也想获取同一个资源时,就放弃当前这个,试图去获取另一个。这样,它们可能恰巧总是想获取同一个,于是它们就“活锁”了。
 
RaceCondition 竞态
 
当我们对一些事件的顺序的推测会受到外部的不可预测的影响时,这种情况就叫做“竞态”。一个典型的情形是,一些线程共享状态。这样线程交替执行,会产生非预期的行为。但是共享状态对于竞态不是必须的,比如通过UDP发送包时,包发送的顺序和接收的顺序可能是乱的。这样,如果单独的包不包含顺序的信息,server端就无法确定它们的发送顺序。这样就是一种竞态。
 
在两个actor之前发送消息时,Akka保证消息发送的顺序会被保留。
 
Non-blocking Guarantees ( Progress Conditions)
 
正如前边所讨论的,阻塞是我们所不希望的,因为它可能导致死锁,并且降低了系统的吞吐量。下边我们讨论不同的非阻塞性质,这些非阻塞性有不同的强度。
 
Wait-freedom
 
如果对一个方法的每次调用在有限的步骤内都能完成,这个方法就被称为"wait-free". If a method is bounded wait-free, then the number of steps has a finite upper bound.
 
wait-free的方法永远不会阻塞,从而不会发生死锁。从另一个角度来看,由于对方法的调用在有限的步骤内会结束,因此调用者在调用结束后会前进,因此也不会有饥饿。
 
Lock-freedom
 
Lock-freedom 比wait-freedom更弱。对于lock-free的方法调用,在绝大多数情况下都会在有限步骤后结束。所以对lock-free调用,死锁是不可能的。但是饥饿是可能的,因为并不能保证所有的调用最终都会结束。
 
Obstruction-freedom
 
Obstruction-freedom是最弱的非阻塞保证。
 
如果一个方法有机会在一个时间点后单独运行(其它线程不再被执行),那它就会在有限的几步内结束,那这个方法就是obstruction-freedom。所有lock-free的对象都是obstruction-free的,但反过来就不成立了。
 
 

Akka学习——术语和概念的更多相关文章

  1. C# Socket编程(1)基本的术语和概念

    计算机程序能够相互联网,相互通讯,这使一切都成为可能,这也是当今互联网存在的基础.那么程序是如何通过网络相互通信的呢?这就是我记录这系列的笔记的原因.C#语言从一开始就是为了互联网而设计的,它为实现程 ...

  2. 【Java】Java Socket编程(1)基本的术语和概念

    计算机程序能够相互联网,相互通讯,这使一切都成为可能,这也是当今互联网存在的基础.那么程序是如何通过网络相互通信的呢?这就是我记录这系列的笔记的原因.Java语言从一开始就是为了互联网而设计的,它为实 ...

  3. 【转】C# Socket编程(1)基本的术语和概念

    [转自:http://www.cnblogs.com/IPrograming/archive/2012/10/10/2718371.html#Protocol] 计算机程序能够相互联网,相互通讯,这使 ...

  4. 顶级Apache Kafka术语和概念

    1.卡夫卡术语 基本上,Kafka架构  包含很少的关键术语,如主题,制作人,消费者, 经纪人等等.要详细了解Apache Kafka,我们必须首先理解这些关键术语.因此,在本文“Kafka术语”中, ...

  5. Oracle RAC学习笔记:基本概念及入门

    Oracle RAC学习笔记:基本概念及入门 2010年04月19日 10:39 来源:书童的博客 作者:书童 编辑:晓熊 [技术开发 技术文章]    oracle 10g real applica ...

  6. Java IO学习笔记:概念与原理

    Java IO学习笔记:概念与原理   一.概念   Java中对文件的操作是以流的方式进行的.流是Java内存中的一组有序数据序列.Java将数据从源(文件.内存.键盘.网络)读入到内存 中,形成了 ...

  7. Prolog学习:基本概念 and Asp.net与Dojo交互:仪器仪表实现

    Asp.net与Dojo交互:仪器仪表实现 项目中需要用到仪器仪表的界面来显示实时的采集信息值,于是便遍地寻找,参考了fusionchart和anychart之后,发现都是收费的,破解的又没有这些功能 ...

  8. AKKA学习笔记

    AKKA学习笔记总结 01. AKKA 1. 介绍: Akka基于Actor模型,提供了一个用于构建可扩展的(Scalable).弹性的(Resilient).快速响应的(Responsive)应用程 ...

  9. Python学习:基本概念

    Python学习:基本概念 一,python的特点: 1,python应用场景多;爬虫,网站,数据挖掘,可视化演示. 2,python运行速度慢,但如果CPU够强,这差距并不明显. 3,严格的缩进式编 ...

随机推荐

  1. android 中int 和 String 互相转换的多种方法

    1 .如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt( ...

  2. Java Servlet-http协议

    ---恢复内容开始--- 互联网三大基石: url:定位数据 html:显示数据 http:传输数据

  3. linux中FTP自动备份VPS脚本

    服务器多了,网站也越来越多,总觉得不整个备份心里放不下心,并且有好几次rm的操作失误,造成难以挽回的损失.并且大多数的VPS提供商是不提供自动备份功能或者此功能收费价格略高.所以自己还是有必要把这个工 ...

  4. BT之下拉菜单

    <div class="dropdown"> <button class="btn btn-default dropdown-toggle" ...

  5. template_11实参演绎

    1,演绎过程匹配类型A(来自实参的类型),参数化类型P(行参参数声明)如果被声明的参数是一个引用声明g(T& )那么P就是所引用类型T:f(T)中P就是所声明的参数类: decay指从数组和函 ...

  6. Fuck Flyme Theme

    转载说明 本篇文章可能已经更新,最新文章请转:http://www.sollyu.com/fuck-flyme-theme/ 说明 本插件仅用于魅蓝Note, MX3, MX4, MX4 PRO它机型 ...

  7. iOS 非ARC基本内存管理系列 -手把手教你ARC——iOS/Mac开发ARC入门和使用(转)

    手把手教你ARC——iOS/Mac开发ARC入门和使用 Revolution of Objective-c 本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容,仅用于技术交流 ...

  8. CCNA第一讲笔记

    园区网:一组连续的局域网(校园网.企业内部网) 园区网拓扑: 一层楼的PC连接到一台交换机(同一层的PC可以互联):一栋楼的每层的交换机连接到同一台交换机(整栋楼的PC可以互联):每栋楼的交换机连接到 ...

  9. Hibernate的单向OneToMany、单向ManyToOne

    单向OneToMany 一个用户有多张照片,User----->Images是一对多关系,在数据库中Images维护一个外键useid 1.在映射关系的主控方Image这边,我们什么都不做.(为 ...

  10. 【原】隐藏ultraGrid1指定列

    void uGrdAllFlight_InitializeRow(object sender, InitializeRowEventArgs e) { /***********TEST START** ...