(大部分为翻译)

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. ios app名字的多语言支持

    经测试,不同版本的xcode会有操作细节不同,本次环境xcode6.4 1)编辑Info.plist,添加一个新的属性Application has localized display name, 设 ...

  2. fuse挂载hdfs目录到linux本地

    1,安装fuse yum -y install hadoop-hdfs-fuse 2.修改环境变量 vi /etc/profile 增加如下配置: JAVA_HOME=/usr/jdk64/jdk1. ...

  3. Java的导入与导出Excel

    使用Jakarta POI导入.导出Excel Jakarta POI 是一套用于访问微软格式文档的Java API.Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和 ...

  4. 【leetcode】365. Water and Jug Problem

    题目描述: You are given two jugs with capacities x and y litres. There is an infinite amount of water su ...

  5. 在O(1)时间删除链表结点

    题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点. 链表结点与函数的定义如下: struct ListNode { int m_nValue; ListNode* m_p ...

  6. C++与Lua交互(一)

    引言 之前做手游项目时,客户端用lua做脚本,基本所有游戏逻辑都用它完成,玩起来有点不爽,感觉"太重"了.而我又比较偏服务端这边(仅有C++),所以热情不高.最近,加入了一个端游项 ...

  7. OpenCV3读取、写入和保存图像

    需要说明的是在OpenCV3中已经将imread()和imwrite()函数转移到imgcodecs模块中,因此读写图像时,需要包含imgcodecs.hpp头文件,但是highgui.hpp头文件中 ...

  8. 关于html5 -- plus Webview模块管理应用窗口界面

    Webview模块管理应用窗口界面,通过plus.webview可获取应用界面管理对象. 方法: all:获取所有的webview窗口 close:关闭webview窗口 create:创建新的web ...

  9. OWIN OAuth 2.0 Authorization Server

    http://www.asp.net/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server The assumption ...

  10. DIV当textarea使用,在聚焦的时候将光标移动到内容的末尾

    #### DIV当textarea使用,在聚焦的时候将光标移动到内容的末尾 #### <style type="text/css"> .test_box { width ...