七周七并发模式:Actor

什么是Actor

  • 在本书提到的观点中,认为Actor是一个线程或者进程。在这个线程或者进程中执行了一段代码(函数),这个代码可以包含状态(数据)也可以不包含。

所谓Actor模型是Sequential Processes和Functions transforming data values两者的结合,可以理解为是综合了过程式计算和函数式计算的一个计算模型。

一个Actor会把接收到的消息映射为三个部分,传给其他Actor的消息,一个新的行为(用来处理下一个消息),和创造一些新的Actors。

使用整体性学习方法来提高学习效率

前言

  • 这篇文章可以说是一篇读书笔记,内容来自《如何高效学习:1年完成MIT4年33门课程的整体性学习法》这本书。
  • 实际上看到书名的时候我的第一反应这是本讲费曼技巧的书,因为在很多年前我看到过一篇文章,标题和这个非常类似,直到我重新翻出来后发现文中所讲的那个人正是这本书的作者。

书的内容

  • 在这里我不打算过多的写书中的内容,只是简单的把一些核心的内容列出来。实际上如果没有时间看书,我觉得看上面链接中的那篇文章是一样的。因为这本书的观点比较简单,大部分内容是来证明这些观点,并且列出了一些如何实践的方法。

七周七并发模型:函数式编程

概念

  • 命令式编程的代码由一系列改变全局状态的语句构成,而函数式编程则是将计算过程抽象成表达式求值。
  • 这些表达式由纯数学函数构成,而这些数学函数是第一类对象(我们可以像操作数值一样操作第一类对象)并且没有副作用。由于没有副作用,函数式编程可以更容易做到线程安全,因此特别适合于并发编程。

为什么在并发和并行问题时会用到函数式编程

  • 有关锁的一些规则,都是针对于线程之间共享的可变的数据——换个说法就是共享可变状态。而对于不变的数据,多线程不使用锁就可以安全地进行访问。
  • 这就是为什么在解决并发和并行问题时函数式编程会如此引人注目——它没有可变状态,所以不会遇到由共享可变状态带来的种种问题。
  • 纯粹的函数式语言中,函数都具有引用透明性——在任何调用函数的地方,都可以用函数运行的结果来替换函数的调用,而不会对程序产生副作用。这个特性也使得可以任意安排多个计算过程的求值顺序,包括让它们并行
  • 所有函数(至少是理论上)都可以同时执行。这种执行方式被称为数据流式编程(dataflow programming)。
  • PS:其实本书在第三章函数式编程部分的前两天中的内容,在我看来更多的是利用语言或者运行时本书的并发能力。后续会专门写个文章总结下C#中对应的并发功能。

七周七并发模型:线程与锁

为何使用多线程和锁

  • 为了能够并行的计算一些东西
  • 因为在多线程下,如果要修改同一个对象是值会出现竞态条件(即代码行为取决于各操作的时序)。它的表现可能是值的不对,甚至某些时候这个值的前半段是一个线程修改的,后半段是另一个线程修改的。因为这个对象可能不是原子的。

锁,或者说是并行控制的进化

第一阶段:锁与同步方法

基础的锁

  • 从代码层面看就是一个lock函数

同步方法

  • 在java或者C#中可以通过attribute来让方法同步执行,但是这个的效率是很低的。
  • 同时还引出了另外一个问题,当同时使用多个锁的时候不但效率会进一步降低,而且容易产生死锁。

侯捷C++学习笔记:对象的创建和销毁

概述

  • 本文会记录CPP中对象的创建和销毁的过程中的细节

big three函数

  • 拷贝构造函数
  • 拷贝赋值函数
  • 析构函数

用途:这三个函数是在类中包含了指针的情况下使用的。

  • 当有一个成员变量是一个指针时,就有了给这个变量赋值的问题。如果这个赋值需要深拷贝,那么就需要申请内存空间。这样在析构函数中就需要对指针进行delete。
  • 这个成员变量可以是在对象构造函数中被赋值的,比如是个拷贝构造函数。也可以是在拷贝赋值函数中被赋值的。

侯捷C++学习笔记:Object Model

composition & delegate & inherit 的构造和析构顺序

侯捷C++学习笔记:Reference

本质

  • 通过指针实现,所以本质就是指针

侯捷C++学习笔记:偏特化

什么是偏特化

  • 泛化(泛型)的反义
  • 分为个数的偏特化和范围的偏特化

数量偏特化

  • 举个例子,如果有如下class的定义,第一个class的就是泛型的,而第二个class,也是两个参数,但是第一个参数是个确定类型的,第二个是泛型的。这样就叫个人的偏特化。这固定类型的位置必须是从左至右的,不能跳着写。

侯捷C++学习笔记:类型转换

自己转换为别的类型

  • 做法:使用operator关键字,无需返回值,函数名称就是返回值。如有需要加上const修饰。

侯捷C++学习笔记:面向对象

Composition

  • 组合
  • 其实就是一个类(Container)中包含了另一个类的实例(Component),注意是实例。
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×