当前位置:网站首页 > Go语言开发 > 正文

go语言编程 许式伟_golang高并发

写在开头:

这篇文章是ECUG2014年七牛CEO许式伟的演讲稿。这篇文章很详细的分析了Go和 Erlang在实现并发编程的差异,但是有些内容可能因为作者本人个人情感的一些原因有些出入导致了知乎上的一些讨论,http://www.zhihu.com/question/,这种讨论甚至激烈的争辩是无法避免的,因为捍卫者需要站出来维护他们正在使用的兵器。关于这种争辩,在其他编程领域也有许多包括C++和java的争论,C和C++的争论等。为了从多个角度对知识有一个了解,后面我附上了张虎的在知乎上的回答,因为他们正在使用erlang。

但是作为一个很系统的技术层面上的一个分析比较已经很详细了。

By lingtao.

---------------------------------------------------------------------------------------------------------------

许式伟:我们开始,先介绍一下ECUG,从07年开始,最早在珠三角珠海广州深圳,在珠三角兴起,最早是Erlang的社区。大概到10年的时候更名为实时效云计算的群组,最早的时候也不局限于Erlang,而是会有各种语言如Haskell、Scala等..,其实根本就没有限制,只要是中途穿插后端开发运维的实践都可以,后来我们就正式改名为实效云计算的群组。,范围扩也蛮大到全国,基本上北京、长三角都有举办过。所以应该说到今天坚持了也差不多有8年,总共有9届,07年的时候办了2届。这个是ECUG 的历史。,南京是第一次办这个大会,我大学是在南京念的,。今年想的挺久的,我们希望是能够把这个火花在所有的城市都能够点燃,所以今年就选择了南京这样一个对我来说比较有特殊意义的地方。

 

我开始我的话题了。其实,这个话题我其实在杭州的ECUG上时候讲过,但是当时讲的比较婉约,实际上我当时已经意识到Erlang的编程风格的问题,但是解刨得并不彻底,,所以我今天又回头谈一下这个话题,用相对比较详细的方法去对比说Go与Erlang并发模型两者到底有什么不同?因为基本上我知道ECUG 发展历史的人都有困惑,为什么我会从Erlang转到切到GoO。

 

这个是话题的来由还是想从头谈谈GO和Erlang的并发,我在09年开始决定放弃用Erlang自己在C++里面重新造一个Erlang的编程模型,CERL这个网络库最初的出发点是这样的,所以CERL的C代表的是C/C++、ERL代表的是Erlang。最早的思路是简单把Erlang搬到C++,因为Erlang的程序员确实比较难招,但是后来发现其实Erlang的并发模型并没有我想象得那么舒畅,就搞了一个CERL2.0,它是对Erlang模型的反思和改进。最后发现这个反思最终得到的结果和Go的并发模型完全一致。所以CERL1.0和2.0的对比,其实你可以认为是Erlang和Go的对比。其实很多人问我这个话题,为什么CERL没有开源?原因是我觉得过了那个时间点了,开源没有太大的意义,所以我觉得不太想误人子弟,因为我自己最早是C++的粉丝,但是我接触Go以后有一个非常强烈的愿望我希望C++这样的东西最好还是能够早点退出历史舞台,关于这个话题我曾经有一个演讲,是讲Go与七牛的历史,我反思了我的C++奋斗史,那个演讲我会后给大家作为一个补充的材料放上去。

 

既然没有开源那应该怎么理解CERL呢?其实这个世界有类似的东西,这个Pth是我最近才知道的,中途还看到过另一个开源库,大概在08年开源的,可惜我一时找不到项目网址了。当时我看了一下跟CERL差不多,但是没有CERL库写的完整,但是Pth这个库出现历史是非常早的,而且是GNU下的一个开源项目,它是99年就已经起动了,到06年左右就不再更新了。它的出现时间非常早,并发模型和CERL是几乎一样,而且完成度非常高,毕竟发展了7年,所以要理解CERL其实也是研究一下这个库基本上就差不多了。但是我其实有一个反思,为什么这个Pth这么好的东西为什么没有流行起来?第一个是生不逢时,出现的太早所以没有引起注意,因为其实大概谈多核时代这样的概念在我的印象当中是07年左右开始有这样的概念,Erlang也是那个时候才逐步被人意识到价值的。第二个就是不是标准库,因为这样一个库侵入性是非常强的不光你意识它好还有别人也意识到,否则有一个问题别人写库你是不能用的,这个就是侵入性和传染性,所以会导致其实没有办法真的把这个库用起来,这种有侵入性和传入性的库最初兴起的时候需要有一些激发的条件,它没有这样的条件。这和C/C++中GC比较难流行是类似的道理,因为GC也有侵入性和传染性。第三个是从实现讲,还是有瑕疵的,最大的瑕疵就是轻量级进程并不是真的轻量。轻量级进程的核心不只是要性能好,更重要的是资源占用要小,但多数情况下的这种资源占用小这个其实是比较难实现的,Go在这一点做的比较好,有栈的自动增长,最小的栈最初的时候可以只有4K,这样每个轻量级进程从资源占用来说真的很轻量。但是要达到这一点这个绝大多数的库都很难做到。像CERL我们只能做到说你自己指定说这个轻量级进程栈要多大,但是对程序员来说指定栈大小是非常困难的事情,有很大的心智负担。要理解CERL,研究这个Pth是比较好的学习材料,当然第二个我认为就是直接学习Go的Runtime了。从轻量级进程来讲,它的底层跟CERL是一样的。

 

轻量级进程模型我非常早就提了,从我最初提倡Erlang的时候就已经提出了这个概念,什么是轻量级进程模型呢?很简单就是两个,一个是鼓励用同步IO写程序逻辑,第二点是用尽可能多的并发进程来提升IO并发能力。这和异步IO并发模型不一样的,哪怕你是单线程也可以做高并发。

 

到此这篇go语言编程 许式伟_golang高并发的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • hash程序_haskell语言能干嘛2024-11-19 22:45:11
  • 多线程开发_多线程开发2024-11-19 22:45:11
  • php和golang优势_php和go哪个好2024-11-19 22:45:11
  • cobra语言_c语言开发什么软件2024-11-19 22:45:11
  • 微软开发的语言_visual studio语言2024-11-19 22:45:11
  • rust google_安卓是谷歌开发的吗2024-11-19 22:45:11
  • rust google_谷歌开发者账号付费怎么解决2024-11-19 22:45:11
  • 【2024最新香港公司谷歌开发者账号注册流程】2024-11-19 22:45:11
  • 【光伏开发】工商业光伏的优势2024-11-19 22:45:11
  • 从零到生产:Go在Google的历程[译]2024-11-19 22:45:11
  • 全屏图片