在现实世界中,顺序化的(sequential)活动非常罕见。当我们走在大街上的时候,如果只看到一件事情发生的话我们一定会感到不可思议,我们期望碰到许多同时进行的活动。

  如果我们不能对同时发生的众多事件所造成的结果进行分析和预测的话,那么我们将会面临巨大的危险,像开车这类的任务我们就不可能完成了。事实上我们是可以做那些需要处理大量并发信息的事情的,这也表明我们本来就是具有很多感知机制的,正是这些机制让我们能够本能地理解并发,而无需有意识地思考。
  然而对于计算机编程来说,情况却突然变得相反。把活动安排成一个顺序发生的事件链被视为是一种规范,并认为在某种意义上讲这样更简单,而把程序安排成一组并发活动则是要尽可能避的,并常常认为会困难一些。
  我相信这是由于几乎所有传统的编程语言对真正的并发缺乏有力支持造成的。绝大多数的编程语言本质上都是顺序化的;在这些编程语言中所有的并发性都仅仅由底层操作系统来提供,而不由编程语言来提供。在本论文中,我展现了这样的一个世界,其中并发是由编程语言来提供的,而不是由底层操作系统来提供。我把对并发提供良好支持的语言称为面向并发的语言(Concurency Oriented Language),简称 COPL。

 COPL 可以由如下 6 个特性来刻画:
  1. COPL 应当支持进程。每一个进程应该可以看作是一个自包含的虚拟机器(self-contained virtual machine)。
  2. 运行在同一机器上的各个进程应该被高度隔离。一个进程中的故障不能对其他进程产生副作用,除非这种交互在程序中被明确化。
  3. 每个进程必须用一个唯一的、不可仿造的标识符来标识。我们称之为进程的 Pid。
  4. 进程之间没有共享状态。进程只通过消息传递来进行交互。只要知道进程的 Pid,就可以向它发消息。
  5. 消息传递被认为是不可靠的,无传输保障的。
  6. 一个进程应当可以检测另一个进程中的故障,并可以知道发生故障的原因。
  值得注意的是,COPL 提供的并发性一定是真正的并发性,因此以进程的形式存在的对象都是真正并发的,进程间的消息传递也是真正的异步消息,而不像许多面向对象语言中一样是通过远程过程调用(remote procedure call)来冒充。

erl_0020 《面对软件错误构建可靠的分布式系统》读书笔记001 “面向并发COPL”的更多相关文章

  1. 软件开发-MSF方法(《构建之法》读书笔记2)

    MSF-微软解决方案框架,是一套大型系统开发指南,它描述了如何用组队模型.过程模型和应用模型来开发Client/Server结构的应用程序,是在微软的工具和技术的基础上建立并开发分布式企业系统应用的参 ...

  2. erl_0014 《硝烟中的erlang》 读书笔记001 “绪论”

    1.大家听说Erlang,往往是因为其对高并发的良好支持.其实,Erlang的核心特征是容错,从某种程度上讲,并发只是容错这个约束下的一个副产品.容错是Erlang语言的DNA,也是和其他所有编程语言 ...

  3. Effective Java 读书笔记之九 并发

    一.访问共享的可变数据时要同步 1.synchronized关键字既然保证访问的可见性也能保证原子性.而volatile修饰符只能保证变量的线程可见性. 2.增量操作符等不是原子性,多线程操作时可能导 ...

  4. 读书笔记:java并发

    java中主要的同步机制是关键字synchronized,它提供一种独占锁,但是 同步这个术语还包括validate类型的变量,显示锁(Explicit Lock)以及原子变量. -------显示锁 ...

  5. 《Java Concurrency》读书笔记,Java并发编程实践基础

    1. 基本概念 程序,是一组有序的静态指令,是一种静态的概念.程序的封闭性是指程序一旦运行,其结果就只取决于程序本身:程序的再现性是指当机器在同一数据集上重复执行同一程序时,机器内部的动作系列完全相同 ...

  6. 《Java并发编程实战》读书笔记一 -- 简介

    <Java并发编程实战>读书笔记一 -- 简介 并发的历史 并发的历史,也是人类利用有限的资源去提高生产效率的一个的例子. 设想现在有台计算机,这台计算机具有以下的资源: 单核CPU一个 ...

  7. 可靠的、可扩展的、可维护的数据系统 ------《Designing Data-Intensive Applications》读书笔记1

    坦白说也是机缘巧合,在硕士生阶段进入分布式系统领域学习.无论是大规模存储或计算,其核心也是运用分布式技术利用并行性来解决数据密集型应用的需求.最近开始在啃这本<Designing Data-In ...

  8. 《构建之法》第四&十七章读书笔记

     <构建之法>第四&十七章读书笔记 一.         前言 再次阅读<构建之法>,愈发被其中生动有趣的举例吸引.作为一本给予软件工程学生的书籍,其不以枯燥的理论知识 ...

  9. 读书笔记_MVC__关于通过js构建ORM,实现Model层

    最近一直在学习MVC构建富应用的WEB程序,自己一直对MVC的设计模式理解的不是十分透彻,终于在研读了github上Spine的源码之后,对构建Model层有了一点自己的理解. 本文仅为个人理解,如有 ...

随机推荐

  1. Python性能(转)

    第一部分 阅读 Zen of Python,在Python解析器中输入 import this. 一个犀利的Python新手可能会注意到"解析"一词, 认为Python不过是另一门 ...

  2. Linux 安装rabbitmq 遇到的一些问题

    Linux下防火墙开启相关端口及查看已开启端口 https://www.cnblogs.com/pizitai/p/6518987.htmlhttps://www.cnblogs.com/blog-y ...

  3. Vue 备

    <div id="app"> <span :class='{red:addClass}'>jam</span> </div> < ...

  4. 在lnmp下开启fileinfo扩展 Ubuntu系统

    在lnmp下开启fileinfo扩展 Ubuntu系统 1.进入目录下 cd /usr/local/lnmp1.4-full/src/php-5.6.31/ext/fileinfo 2.phpize处 ...

  5. phalcon: 解决php7/phalcon3.2以上版本,不支持oracle数据库的方法

    解决php7/phalcon3.2以上版本,不支持oracle数据库的方法 phalcon3.2(3.0以上)版本不支持oracle的方法. https://github.com/phalcon/in ...

  6. 一个不错的JavaScript解析浏览器路径方法

    JavaScript中有时需要用到当前的请求路径等涉及到url的情况,正常情况下我们可以使用location对象来获取我们需要的信息,本文从另外一个途径来解决这个问题,而且更加巧妙 方法如下: fun ...

  7. Python之路,Day8 - 面向对象编程进阶

    本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 经典 ...

  8. 【MySQL】日期与字符串间的相互转换

    字符串转日期 下面将讲述如何在MySQL中把一个字符串转换成日期: 背景:rq字段信息为:20100901 无需转换的: SELECT * FROM tairlist_day WHERE rq> ...

  9. 【Error】Creating Server TCP listening socket *:6379: bind: No such file or directory

    redis 运行服务时报错: Creating Server TCP listening socket *:6379: bind: No such file or directory 解决方法,依次输 ...

  10. nfc功能读写 demo

    点此下载//这个demo是把这个程序作为一个手机启动选择的,只要一扫到卡片就会跳转到这个Activity. 只在当前Activity中有效参考:http://blog.csdn.net/zoeice/ ...