(大部分为翻译)

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. ContentProvider深度探索

    如果你选择用SQLite数据库存储应用程序数据,我建议你创建ContentProvider,即使存储的数据仅供内部使用.原因是Android提供了一些工具类以及UI相关的类,它们的工作在Content ...

  2. Ajax-数据格式-html

  3. SQL Server2008新特性Filesteam的使用

    Filesteam是SQL Server2008的新特性,它结合了SQL Server和NTFS文件系统,为Blob类型的数据提供了比较高效的存储和访问方案.我们最近的一个项目就是采用SQL Serv ...

  4. C#程序员整理的Unity 3D笔记(十五):Unity 3D UI控件至尊–NGUI

    目前,UGUI问世不过半年(其随着Unity 4.6发布问世),而市面上商用的产品,UI控件的至尊为NGUI:影响力和广度(可搜索公司招聘Unity 3D,常常能看到对NGUI关键词). NGUI虽然 ...

  5. Navicat for mysql linux 破解方法

    安装方法   进入下载页面:http://www.navicat.com.cn/download/navicat-for-mysql ,选择Linux版本进行下载,下载后解压安装包,运行 start_ ...

  6. 3月3日(3) Binary Tree Preorder Traversal

    原题 Binary Tree Preorder Traversal 没什么好说的... 二叉树的前序遍历,当然如果我一样忘记了什么是前序遍历的..  啊啊.. 总之,前序.中序.后序,是按照根的位置来 ...

  7. L005-oldboy-mysql-dba-lesson05

    L005-oldboy-mysql-dba-lesson05 在线改表工具:pt-onine-schema-change 来自为知笔记(Wiz)

  8. spring 计划任务:cron表达式

    Cron表达式是一个字符串,字符串以5或6个空格隔开,分开工6或7个域,每一个域代表一个含义,Cron有如下两种语法 格式: Seconds Minutes Hours DayofMonth Mont ...

  9. 【转】DataGridView绑定数据源的几种方式

    第一种:DataSet ds=new DataSet (); this.dataGridView1.DataSource=ds.Table[0]; 第二种:DataTable dt=new DataT ...

  10. NoSQL专家王涛访谈:为什么我们还要做一个NoSQL?

    ChinaUnix:各位网友大家好,今天有幸请到王涛先生到CU做客,与大家交流一些工作经验.首先请王涛先介绍一下自己. 王涛:大家好,我是王涛.过去八年里我一直在IBM多伦多实验室从事DB2引擎研发的 ...