异步编程模型的说明

前几日在看到Alexander Temerev在github上创建了一个项目skynet,用来比较各语言的并发编程的性能,当时觉得这个项目挺有趣,也就翻译整理了一下,写了一篇文章:1百万线程的性能,并且分享在开发者头条上。

本身这个项目涉及的语言很多,测试代码也不一定完全合理,因此这个项目的issue中也有很多讨论,也有很多贡献者提供了其它语言的测试代码,或者完善了现有的测试代码。

很多读者也对这个项目感兴趣,也在我的文章中留言表达了自己的观点,我很赞赏这些有意义的观点。

这个项目的描述是"Skynet 1M threads microbenchmark",我也采用了这样的描述作为文章的标题。当然大家都知道这个项目比较的并不是1百万线程的性能,
而是各个语言中为并发编程实现的类似线程的编程模型,这个各个语言为并发编程而做的努力。

当然,每个编程语言实现的并发编程模型也不尽相同,我们没办法用一个统一的概念称呼它们,姑且叫做"线程”吧。

各种语言的编程模型从内存实现上可以分为两类:

  1. 基于共享内存的模型:采用单一的统一的内存镜像,并发单元通过共享内存进行通讯,比如Java中的线程
  2. 基于消息传递的模型:每个并发单元包含自有的内存,并发单元通过消息交换进行通讯,比如go channel,Scala Actor等

从实现上来说,至少有三种模型实现:

  1. 基于线程的实现: 大部分的操作系统(轻量级的进程、内核级、用户级)、Java、C、C++都是这种实现
  2. 基于Actor的实现:Scala, Erlang等
  3. 基于Coroutine的实现:Haskell, Python等

当然,有些语言也不止一种实现,比如Python还有Pykka,它是一种actor的实现。 Java也可以使用Akka Actor实现Actor模型,比如Go实现了goroutine和CSP模型(channel)。

Paul Butcher写了一本书,叫七周七并发模型, 对并发编程想了解的不妨看看。

参考文档:

  1. https://en.wikipedia.org/wiki/Light-weight_process
  2. https://en.wikipedia.org/wiki/Coroutine
  3. https://en.wikipedia.org/wiki/Green_threads
  4. http://tutorials.jenkov.com/java-concurrency/concurrency-models.html
  5. https://en.wikipedia.org/wiki/Concurrency_%28computer_science%29#Models
  6. https://en.wikipedia.org/wiki/Communicating_sequential_processes
  7. http://www.amazon.com/Seven-Concurrency-Models-Weeks-Programmers/dp/1937785653
  8. http://berb.github.io/diploma-thesis/original/056_other.html
  9. http://grid.cs.gsu.edu/~tcpp/curriculum/sites/default/files/Programming%20with%20Concurrency%20-%20Threads%20Actors%20and%20Coroutines.pptx

Java 8 lambdas读书笔记

Java 8 Lambdas是O'Reilly 2014年3月出版的一本介绍最新Java Lambda技术的书。网上评价也不错。正好我需要找一本全面介绍Java Lambda数据, 来整理一下我脑海中的关于Java Lambda非系统的知识点。

Lambda对于我来讲,并不是一个很新的技术。因为微软很早就在C#中加入了Lambda的特性。 而Java Lambda的语法和C#的语法非常的相像。 这篇文章算是对Java Lambda语法的一个整理。

这本书一共十个章节。 第一章是简单介绍,没有实质内容。 第二章主要介绍了Java Lambda的语法。第三章介绍了Stream接口。第四章介绍了Functional Interface。第五章 首先介绍了方法引用,然后主要介绍了集合类新的Stream处理方式。 第六章 介绍了数据的并行处理。 第七章介绍了测试,调试和重构技术。第八章介绍了使用lambda的设计和架构原则。
第九章介绍了并发编程中的Lambda的应用。 第十章 前瞻,无实质内容

阅读全文