在本章中,我们尝试建立一个通用术语,以便为Akka所针对的并发分布式系统进行通信奠定坚实的基础。请注意,对于其中许多条款,没有单一的商定定义。我们寻求提供将在Akka文档范围内使用的工作定义。

并发与并行

并发和并行是相关的概念,但存在细微差别。并发意味着两个或多个任务正在取得进展,即使它们可能没有同时执行。这可以例如通过时间切片来实现,其中任务的各部分被顺序执行并且与其他任务的部分混合。另一方面,并​​行性在执行可以真正同时发生时出现。

异步与同步

如果调用方在方法返回值或抛出异常之前无法进行,则方法调用被视为同步。另一方面,异步调用允许调用者在有限数量的步骤之后前进,并且可以通过一些附加机制(它可以是注册的回调,Future或消息)来发信号通知方法的完成。

同步API可以使用阻塞来实现同步,但这不是必需的。CPU密集型任务可能会产生与阻塞类似的行为。通常,最好使用异步API,因为它们可以保证系统能够进步。Actor本质上是异步的:Actor可以在发送消息后继续进行,而无需等待实际的传递发生。

非阻塞与阻塞

我们讨论阻塞,例如如果一个线程的延迟可以无限延迟其他一些线程。一个很好的例子是一个资源,它可以由一个使用互斥的线程专门使用。如果线程无限期地保留资源(例如意外地运行无限循环),则等待资源的其他线程无法进行。相反,非阻塞意味着没有线程能够无限期地延迟其他线程。

非阻塞操作比阻塞操作更受欢迎,因为当系统包含阻塞操作时,系统的整体进度难以保证。

死锁与饥饿与现场锁定

当几个Actor彼此等待达到特定状态以便能够进展时,就会出现死锁。由于没有其他Actor达到某种状态,所有受影响的子系统都会停止运转。死锁与阻塞密切相关,因为参与者线程能够无限延迟其他线程的进展。

在死锁的情况下,没有参与者可以取得进展,而相反,当有参与者可以取得进展时会发生饥饿,但可能有一个或多个不可能。典型情况是天真调度算法的情况,该算法总是选择低优先级任务的高优先级任务。如果传入的高优先级任务的数量始终足够高,则不会完成任何低优先级任务。

Livelock类似于死锁,因为没有参与者取得进展。但不同的是,参与者不是在等待其他人进步的状态下被冻结,而是不断改变他们的状态。两个参与者有两个相同资源可用的示例场景。他们每个人都试图获取资源,但他们也检查对方是否也需要资源。如果资源是由其他参与者请求的,则他们尝试获取该资源的另一个实例。在不幸的情况下,可能会发生这两个参与者在两种资源之间“反弹”,从未获得它,但总是屈服于另一种资源。

竞争条件

当外部非确定性效应可能违反关于一组事件的排序的假设时,我们将其称为竞争条件。当多个线程具有共享可变状态时,通常会出现竞争条件,并且状态上的线程操作可能会交错,从而导致意外行为。虽然这是一种常见情况,但共享状态不一定具有竞争条件。一个示例可以是客户端将无序分组(例如UDP数据报)P1,P2发送到服务器。由于数据包可能通过不同的网络路由传输,因此服务器可能先接收P2,然后接收P1。如果消息中不包含有关其发送顺序的信息,则服务器无法确定它们是以不同的顺序发送的。根据数据包的含义,这可能会导致竞争条件。

非阻塞保证(进展条件)

正如前面部分所讨论的那样,阻塞是不可取的,原因有多种,包括死锁的危险和系统中的吞吐量降低。在以下部分中,我们将讨论具有不同强度的各种非阻塞特性。

Wait-freedom

wait-free方法表示如果保证每个调用都以有限的步数完成。如果方法是无限制的,则步数具有有限的上限。

从这个定义可以看出,无等待方法永远不会阻塞,因此不会发生死锁。此外,由于每个参与者可以在有限数量的步骤之后(当呼叫结束时)进展,因此无等待方法没有饥饿。

Lock-freedom

Lock-freedom是一种比wait-free更弱的。在无锁调用的情况下,无限次地某些方法在有限数量的步骤中完成。此定义意味着无锁调用不会出现死锁。另一方面,某些呼叫在有限数量的步骤中完成的保证不足以保证所有呼叫最终完成。换句话说,Lock-freedom不足以保证缺乏饥饿。

Obstruction-freedom
Obstruction-freedom是这里讨论的最弱的非阻碍保证。如果一个方法在一个时间点之后被隔离执行(其他线程没有任何步骤,例如:被暂停),则该方法被称为无障碍,它以有限的步数完成。所有无锁物体都是无障碍的,但相反的情况通常是不正确的。

乐观并发控制(OCC)方法通常是无障碍的。OCC方法是每个参与者都尝试在共享对象上执行其操作,但如果参与者检测到其他参与者的冲突,则会回滚修改,并根据某些计划再次尝试。如果有一个时间点,其中一个参与者是唯一尝试的参与者,则操作将成功。

推荐文献:

  • The Art of Multiprocessor Programming, M. Herlihy and N Shavit, 2008. ISBN 978-0123705914
  • Java Concurrency in Practice, B. Goetz, T. Peierls, J. Bloch, J. Bowbeer, D. Holmes and D. Lea, 2006. ISBN 978-0321349606

下节再续!

原文:https://doc.akka.io/docs/akka/2.5/guide/tutorial_5.html

Akka相关术语 译《fifteen》相关推荐

  1. Linux相关术语发音

    Linux相关术语发音<?xml:namespace prefix = o /> Unix: [ ju:niks ] 发音 (yew-nicks) 尤里克斯 GNU [ gəˈnju: ] ...

  2. 【FFmpeg】FFmpeg 相关术语简介 ( 容器 | 媒体流 | 数据帧 | 数据包 | 编解码器 | 复用 | 解复用 )

    文章目录 一.FFmpeg 简介 二.FFmpeg 相关术语 1.容器 2.媒体流 3.数据帧 4.数据包 5.编解码器 6.复用 7.解复用 博客资源 一.FFmpeg 简介 FFmpeg 是 &q ...

  3. 【软件工程】CMMI 能力成熟度模型集成 ( 简介 | 相关术语 | CMMI 等级评估次序 )

    文章目录 一.CMMI 简介 二.CMMI 相关术语 三.CMMI 等级评估次序 一.CMMI 简介 CMMI 全称 Capability Maturity Model Integration , 能 ...

  4. 动态代理——》AOP —— Spring 中的 AOP||AOP 相关术语||学习 spring 中的 AOP 要明确的事

    AOP 概述 什么是 AOP       AOP:全称是 Aspect Oriented Programming 即:面向切面编程 AOP 的作用及优势 作用: 在程序运行期间,不修改源码对已有方法进 ...

  5. property field java_Java 中 field 和 variable 区别及相关术语解释

    原标题:Java 中 field 和 variable 区别及相关术语解释 先说一下 field 和 variable 之间的区别: class variables and instance vari ...

  6. Spring AOP相关术语解释及简单使用

    什么是面向切面编程 百度百科定义为:在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. ...

  7. 3.数据库操作相关术语,Oracle认证,insert into,批量插入,update tablename set,delete和truncate的区别,sql文件导入

     1相关术语 语句 含义 操作 DML语句 (Data Manipulation Language) 数据库操作语言 insert update delete select DDL语言 (Date ...

  8. 王道考研 计算机网络8 物理层基本概念 数据通信相关术语

    第二章知识 物理层基本概念 典型的数据通信模型 数据通信相关术语 三种通信方式 两种传输方式 串行:一条信道 并行:多条信道

  9. Linux系统编程31:进程信号之什么是信号的阻塞及相关术语(递达,未决,pending位图,handler位图)

    文章目录 (1)信号相关术语 (2)信号在内核中的表示 前面说过,操作系统发出信号之后,对于进程有可能不是立马就处理的,所以如果不是立即处理,那么在这个空档期间进程究竟对信号做了怎样的处理呢? (1) ...

最新文章

  1. 《Effective C#中文版:改善C#程序的50种方法》读书笔记
  2. socket.io的 Python客户端中文encode问题
  3. NDK中C++标准库、STL的配置;Include其他头文件
  4. JSP与servlet之间的传值方式
  5. WSUS注冊表導入,工作組用戶系統更新
  6. DP_字串匹配(HDU_1501)
  7. php 调用扫描仪,如何从浏览器中触发扫描仪?
  8. 相机标定(三) —— 畸变校正
  9. 洛谷 P2853 [USACO06DEC]Cow Picnic S-dfs
  10. 2015-8-10工作日志
  11. active mq topic消费后删除_《我想进大厂》之MQ夺命连环11问
  12. 阿里云大数据利器Maxcompute-使用mapjoin优化查询
  13. 福玛特机器人怎么开机_福玛特扫地机器人常见问题故障汇总
  14. nginx websocket wss 连接失败 failed_浅谈WebSocket协议、WS协议和WSS协议原理及关系
  15. android9.0 framewrok.jar push到system/framework不起作用,解决方式
  16. Make Cents
  17. MIT.6.00.1X --Week 3 Lecture 5 -- 'Divid and conqer' algorithm 分而治之
  18. Python中制表符\t的使用
  19. VUE2 组件间传值
  20. 【吐血整理】互联网大厂面试遇到的100道软件测试面试题+答案

热门文章

  1. 温故而知新:new与override的差异以及virtual方法与abstract方法的区别
  2. Postgresql:本地化支持
  3. [转载] java自定义异常类以及全局log打印
  4. SVN更新无数次后仍显示Out of date
  5. Python基础---循环、条件判断
  6. MVC部分视图的使用
  7. subprocess,类
  8. spingMVC问题小结
  9. ubuntu 12.04 以固定 IP 地址连接网络并配置DNS
  10. android 联系人存储结构