(大部分为翻译)

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. Javascript之spry菜单栏

    我没有添加任何东西,这是Dreamweaver原汁原味用spry创建的菜单栏,以此来学习菜单导航,哈哈. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTM ...

  2. jquery 事件委托绑定click的使用方法

    直接绑定ul的click事件  代码如下 复制代码 $("ul").click(function(e) 例子  代码如下 复制代码 $(function(){ //$(" ...

  3. (转)数据库SQL优化大总结之 百万级数据库优化方案

    网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 这篇文章我花费了大量的时间查找资料.修改.排版,希望大家阅读之后,感觉 ...

  4. Apache 使用密码文件验证用户

    使用文本文件作为密码文件 创建密码文件 需要使用htpasswd.exe文件来创建用户密码文件 语法: htpasswd -c '文件完整路径' 用户名 向一个用户密码文件中添加一个新用户 语法: h ...

  5. 基于IOS和Android设备MDM技术方案服务价格

    导读:前段时间 www.mbaike.net 博客被恶意攻击,导致程序崩溃,目前已经替换了以前的Wordpress程序,现提供IOS和Android版本MDM的代码和相关文档咨询服务. 一.IOS版M ...

  6. 一.Nginx的特性和一些知识点

    一.Nginx的特性和一些知识点 1.基本功能服务器      处理静态文件(静态资源的web),支持 反向代理服务器,支持缓存.负载均衡.支持FastCGI      模块化机制,非DOS机制,支持 ...

  7. Mindjet.MindManager“参数错误”解决办法,适用于9.0、10.0和14.0

    MindManager出14.0版本了,但是在应用个别模板的时候会提示“参数错误”,然后自动关闭. 解决办法:   如果是win7系统,可以进入C:\Users\(用户名) \AppData\Loca ...

  8. 解决java.io.IOException: Cannot run program "cygpath": CreateProcess error=2, 系统找不到指定的文件 的错误

    一.外部环境: 系统环境:Windows 8 磁盘分区:只有C盘 开发环境:IntelliJ IDEA Community Edition 2016.1.3(64) 执行代码:rdd.saveAsTe ...

  9. Wpf 简单制作自己的窗体样式

    最近一直在搞wpf相关的东东,由于还在门外徘徊,所以第一篇blog写了简单的制作扁平化的wpf button样式,这一篇也简单的制作属于自己wpf 窗体的样式. 废话少说,下面就开始制作自己的窗体样式 ...

  10. 《WPF程序设计指南》读书笔记——第7章 Canvas

    1.Canvas面板 using System; using System.Windows; using System.Windows.Controls; using System.Windows.M ...