开一个吐槽贴,一吐为快。
前几日在看到Alexander Temerev在github上创建了一个项目 skynet ,用来比较各语言的并发编程的性能,当时觉得这个项目挺有趣,也就翻译整理了一下,写了一篇文章:1百万线程的性能,并且分享在开发者头条上。
本身这个项目涉及的语言很多,测试代码也不一定完全合理,因此这个项目的issue中也有很多讨论,也有很多贡献者提供了其它语言的测试代码,或者完善了现有的测试代码。
很多读者也对这个项目感兴趣,也在我的文章中留言表达了自己的观点,我很赞赏这些有意义的观点。
这个项目的描述是"Skynet 1M threads microbenchmark",我也采用了这样的描述作为文章的标题。当然大家都知道这个项目比较的并不是1百万线程的性能,而是各个语言中为并发编程实现的类似线程的编程模型,这个各个语言为并发编程而做的努力。
当然,每个编程语言实现的并发编程模型也不尽相同,我们没办法用一个统一的概念称呼它们,姑且叫做"线程”吧。
各种语言的编程模型从内存实现上可以分为两类:
- 基于共享内存的模型:采用单一的统一的内存镜像,并发单元通过共享内存进行通讯,比如Java中的线程
- 基于消息传递的模型:每个并发单元包含自有的内存,发单元通过消息交换进行通讯,比如go channel,Scala Actor等
从实现上来说,至少有三种模型实现:
- 基于线程的实现: 大部分的操作系统(轻量级的进程、内核级、用户级)、Java、C、C++都是这种实现
- 基于Actor的实现:Scala, Erlang等
- 基于Coroutine的实现:Haskell, Python等
当然,有些语言也不止一种实现,比如Python还有Pykka,它是一种actor的实现。 Java也可以使用Akka Actor实现Actor模型,比如Go实现了goroutine和CSP模型(channel)。
Paul Butcher写了一本书,叫 七周七并发模型 , 对并发编程想了解的访问可以看看。
我想吐槽的是,有些不懂装懂,半瓶子咣当的人呢,看了项目的介绍后,无厘头吐槽:
飒然Hang 2016-02-26 10:32建议加一个踩的功能,才能防止这种水文被推到每日头条。。。
* 尽头。、 2016-02-24 20:43我只能说你真的是业内人吗
冒烟的蘑菇 2016-02-24 18:26这关线程毛事情吗?
我想说的是,你真的了解各语言的并发编程模型吗?
参考文档:
- https://en.wikipedia.org/wiki/Light-weight_process
- https://en.wikipedia.org/wiki/Coroutine
- https://en.wikipedia.org/wiki/Green_threads
- http://tutorials.jenkov.com/java-concurrency/concurrency-models.html
- https://en.wikipedia.org/wiki/Concurrency_%28computer_science%29#Models
- https://en.wikipedia.org/wiki/Communicating_sequential_processes
- http://www.amazon.com/Seven-Concurrency-Models-Weeks-Programmers/dp/1937785653
- http://berb.github.io/diploma-thesis/original/056_other.html
- https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0ahUKEwiomriG1JTLAhVBqh4KHVPrBGAQFggmMAE&url=http%3A%2F%2Fgrid.cs.gsu.edu%2F~tcpp%2Fcurriculum%2Fsites%2Fdefault%2Ffiles%2FProgramming%2520with%2520Concurrency%2520-%2520Threads%2520Actors%2520and%2520Coroutines.pptx&usg=AFQjCNEOJCLRyCsU-ukhmWzIliL6YibaEQ
原文 http://colobu.com/2016/02/26/Do-not-make-ignorance-as-fearless/