西西河

主题:【原创】介绍一下Go语言(1)之前的话 -- zllwy

共:💬92 🌺231 新:
全看分页树展 · 主题
家园 【原创】介绍一下Go语言(1)之前的话

我知道会有很多争议的。就当一家之言来看吧。欢迎讨论。

先说说我入门的经历。最早知道Go是还在Android的时候,坐我对面的一位资深老程序员(以前是xbox team做graphics的)跟我介绍了Google内部在开发的新语言。新的语言这年头也层出不穷,我也没注意。后来到了现在的公司,开始做web service,主要用Java。特别讨厌netty的异步编程方式(netty本身还是好同志,对了,如果你没听说过,netty是一个基于Java nio的一个网络编程库),所以就开始想到coroutine,因为coroutine是非常轻的,可以大量创建,这样可以同时保证并行性和代码的顺序性。不过coroutine在C里面比较容易实现,利用gcc的特殊feature可以实现,有专门的库可以用。在Java里面,没有直接的实现。只好退一步,考虑continuation,利用continuation可以实现coroutine。continuation其实是个非常强大的概念。函数调用返回其实是continuation的一种特殊形式(参考google吧)。Java里面说了好久要支持continuation,因为它是实现generator的必需。曾经进了Java 7的draft,但后来被JCP砍了。有一些专门的库,比如RIFE和apache commons的Javaflow,实现了continuation,不过因为没有JVM支持,效率比较低。后来发现了Cambridge(UK那个)一个印度人的博士论文,他写了一个系统叫Kilim,在Google还有个tech talk。Kilim在Java上实现了一套最基本的Actor/Message的实现。他的办法是用一个"Pausable" exception来标志有可能主动pause的函数,然后在编译后经过一道特殊的Java class的binary rewriting,在所有的pausable的函数前后插入维持continuation状态的代码。这样就可以实现类似coroutine那样的合作式并发,或者称为轻量级的thread,和windows上的fiber比较像。实际上Kilim也把它的并发单元叫做fiber。Kilim还实现了基本的消息传递的机制。Kilim是看来最完整最高效的在Java里面actor的实现。不过Kilim的问题是它要多一道工序,改写class file。另外所有的I/O代码其实也要重写来支持fiber。这些好在也不是太大的问题,实际上有人已经开始用kilim了。

随着我对Actor模型的兴趣,go再一次重新进入我的视野(scala什么的就不提了)。这次,我发现Go正式我期盼已久的语言。

元宝推荐:铁手, 通宝推:博客南,zczxyz,
全看分页树展 · 主题


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河