类库大魔王
类库大魔王 懒惰,傲慢,以及无耐心

初读《七周七并发模型》

前几天粗略翻阅了一下《七周七并发模型》,这是本从v2ex上收来的二手书,虽然算上快递费也并没比新买一本便宜多少,但是知识是无价的,呵呵。

《七周七并发模型》讲了7种软件开发中最常使用的并发模型,分别是:

  1. 线程和锁,最基础最常用,也是其他并发模型的技术基础。我目前经历过的C++项目中基本上都是使用的这种方案,顶多就是选取不同的锁以应付不同的应用场景。
  2. 函数式编程,书中讲了Clojure语言,一种基于JVM而语法上又类似Lisp的语言。函数式编程本身有很多值得讲的,据说它天然的无副作用函数特别适合并发编程,但我还是没搞清楚。函数式编程有三类场景,分别是map,filter和reduce,然后用future来实现异步求值。Qt中对这些都提供了支持,C++标准库中也有一部分支持,但具体怎么在我们的C++项目中通过使用函数式编程来达到书中所说的并发无副作用的效果,我还是没有头绪。
  3. 分离标识和状态。书中仍然以Clojure为例,说到很多编程语言中,变量就是混合了标识和状态,然后引入了原子变量,可以在需要读写变量时提供一个副本。我一直以来只是把原子变量当成更小粒度的锁的应用,还真没想到它有其他更高级的用法。这部分我也没搞明白,需要继续学习。
  4. actor模型,就是Erlang用到的,进程各自互不干扰地运行,通过消息通信,进程崩溃也就崩溃了。
  5. CSP模型,就是Go用的,与actor的区别在于CSP更侧重于通信信道的建立和维护,actor更侧重于信道两侧的实体。
  6. 使用GPU做并行计算,可以用OpenCL、CUDA之类的库实现,这块我也没接触过。
  7. lambda计算,分布式计算用到的,我也没接触过。

现在感觉我目前用到的编程语言(C++、Go)对前3种都至少有一定程度的支持,可以好好挖掘一下适用的场景。actor和CSP则是特定的编程语言才会有支持,除非用到了这些语言做开发,不然也不用多想。第6种主要适用大量代数运算的场景。

总的说来,收获很大。

感觉本文不错,不妨小额鼓励我一下!
支付宝扫一扫

支付宝扫一扫

微信扫一扫

微信扫一扫

如果你看不到评论框,说明Disqus被墙了。