简约语言:golang; CSP式的并发模型
所谓”魔幻语言“,主要代表作品有C++、Perl、Javascript和Ruby。这些语言拥有丰富的特性,聪明的技 巧和意想不到的奇效,永远有发掘不完的奇技淫巧,总能找到让人匪夷所思的”yet another way"。反过来,“简约语言”崇尚清晰直接,够用就行,要求从代码容易理解,宁可笨一点、累一点、多写一点代码,反对出人意料的技巧,反对故弄玄虚。 C、PHP、Python和Lua这一派语言的代表作。
看来golang也是“简约语言”。
之前一直使用python的微线程(协程,纤程)开发模式,对gevent和stackless都有一定的了解。由于python有GIL,实际开发中很少用到thread,这时对stackless中的channel使用有些不理解。为什么多个微线程中需要用channel来通讯呢?微线程本身并非实际并发执行,完全可以用共享内存的方式来通讯。所以在之前使用python开发项目时,为了利用多核,项目的架构一般是:微线程+多进程模式。微线程使用共享内存的开发方式,的确比较简单方便。
最近在学习golang时,看到很多golang资料中提到CSP(“通过通信来共享内存,而非通过共享内存来通信”的原则)。最初不甚理解,看了这篇资料(http://concur.rspace.googlecode.com/hg/talk/concur.html)后顿悟。文章中用简单明了的图演示了CSP和普通的共享内存方式实现的并发模型,golang中的goroutine是能在多个真实线程下执行的,从而达到了真正利用多核的目的。虽然开始对CSP有些感觉,不过如果要在实际项目中使用还会有很多细节需要考虑。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。