(大部分为翻译)

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. 交叉编译lsof for android

    Android 自带的那个 lsof 实际上是 toolbox 里的,功能十分单一,除了显示出所有进程的所有打开的文件外就什么都不能做,连说明也没有 :-( 于是为了 htop 用着爽一点,还是自己编 ...

  2. reduce + Promise 顺序执行代码

    本文地址: http://www.cnblogs.com/jasonxuli/p/4398742.html 下午的太阳晒得昏昏沉沉,和上周五一样迷糊,看一段代码半天没看明白,刚才不知不觉眯了几分钟,醒 ...

  3. JavaScript代码检查工具 — JSHint

    静态代码检查是开发工作中不可缺少的一环,毕竟对于程序化的工作人的眼睛是不可靠的,更何况是自己的眼睛看自己的代码.即使最后的运行结果通过,但可能存在一些未定义的变量.定义了但最后没用过的变量.分号有没有 ...

  4. ViewPager的简单例子

    这个例子是按照官网上的例子写的,有点抄袭的嫌疑,但是自己单独写一下会加深自己的印象. 首先是MainAcitivity.xml: <LinearLayout xmlns:android=&quo ...

  5. Git初始化与上传

    一: 现在git上Create个repository 二:进入要长传的工程目录打开git bash git initgit statusgit add .//add .的时候文件不要被占用. git ...

  6. 使用轻量级Spring @Scheduled注解执行定时任务

    WEB项目中需要加入一个定时执行任务,可以使用Quartz来实现,由于项目就一个定时任务,所以想简单点,不用去配置那些Quartz的配置文件,所以就采用了Spring @Scheduled注解来实现了 ...

  7. ubuntu 12.04 clang 3.4 安装

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4137402.html 1.添加clang源 deb http://llvm.org/apt/ ...

  8. 在ThinkPHP3.x框架中实现将原创文章第一时间推送到百度收录

    前两天自己写的一篇文章“针对BootStrap中tabs控件的美化和完善”被别的网站给转载了,这也许是值得高兴的一件事情,但是有些网站并没有注明来源和作者.而去百度搜索这篇文章,排名第一的居然是那些转 ...

  9. centos 安装ecshop出现date错误

    centos 安装ecshop 错误提示 Warning: date(): It is not safe to rely on the system's timezone settings. You ...

  10. Hello World 的makefile模板及其分析

    makefile模板: ifeq ($(KERNELRELEASE),) //判断KERNELRELEASE是否为空,只有执行make的当前目录为内核源代码目录时,该变量才不为空. KERNELDIR ...