`
qiezi
  • 浏览: 497307 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Erlang/IoLanguage/Ruby

阅读更多
最近下决心和Erlang说再见了,想了很多,也用了一段时间,断断续续数落过几次Erlang的优缺点,看得不深,权当我是瞎说。简单整理一下:

优点:高并发、分布式、资源管理、高效率(和其它动态语言比较)、热升级、自动并行
缺点:语言抽象能力不强、语言扩展能力不强、FP让大多数人不适应、和C库交互不好

有一段时间我打算自己做一套类似的框架,使用coroutine,虽然我测试过的coroutine库都不如Erlang高效(注1),但C编写处理代码比Erlang高效多了,完全可以弥补。和C库的交互可以更自然地实现。我不打算做个多线程的调度器,因为有太多第三方库需要线程池、异步IO去完成的操作,这些也需要CPU,当然目前飞速发展的多核技术也不能完全忽视,这方面必须留下扩展的余地,但重点只是在调度器上。

原打算项目不忙的时候就开工,不过最近看到了IoLanguage,感觉也挺值得研究一下的。它还很年轻,对于第三方库的调用也没有很好地解决,但它的语法吸引了我。看一下它的addons库,还挺丰富,OpenGL/Image/Gui/XML/Network/Video/Database,各种库都有,对于一个年轻的语言来说够多了。IoLanguage最吸引我的是它的优雅的异步实现(用库而不是语言),没有关键字,这都证明了它本身是非常容易扩充的,它的Socket库更证明了这一点。

IoLanguage的缺点除了第三方库的调用以外,多核支持还没有,效率还很差,从诞生到现在还没有进行过大的性能提升。

IoLanguage给我的最大帮助是帮我从Erlang的并发中脱离出来,很长一段时间我的脑子都跟着Erlang的spawn在跑,即便我想用其它语言来实现类似的并发,我也会选想到spawn。从IoLanguage的学习中我认清了并发、异步的目的,我们的目的不是为了创建进程,只是为了让它脱离当前执行序列来并行执行,有时候我们不想取得它的执行结果,有时候又需要这个结果,Erlang没有对这种差异或者类似的层次进行抽象。Erlang在这方面走了个极端,创建进程很容易,但处理结果相对麻烦,pmap给了我很深的印象,但远不如IoLanguage的优雅。这主要是由于Erlang的语言抽象能力有限造成的。

Ruby很久没有使用了,自从接触Erlang,项目中又完全是C++以后,就远离它了。最近却突然感觉它的潜力还很大,1.9的性能大幅提升,加上强悍的扩展能力,完全可以代替IoLanguage,实现一套基于Fiber的并发库。

总之我现在觉得coroutine是并发的唯一出路,它能极大地简化并发和异步编程,仅为了并发就改变习惯使用另一种风格的语言,代价也非常大,所以Erlang不是我的选择,IoLanguage还不成熟,C++/Ruby还是可以尝试一下的。

这一年多在各种语言中游走了一圈,难道又要走回去了。。。

注1:
很多C版本的coroutine库不如erlang高效的原因在于,C版本的coroutine库都是使用栈跳转的,执行跳转的时候还是要保存一些上下文比如寄存器,而erlang/stackless python则本身不使用这种跳转方式,切换开销较小。
7
0
分享到:
评论
9 楼 axgle 2009-10-17  
"我们的目的不是为了创建进程,只是为了让它脱离当前执行序列来并行执行,有时候我们不想取得它的执行结果,有时候又需要这个结果"
8 楼 pascal4123 2009-02-09  
别走阿:(
7 楼 zgd 2008-07-02  
那热升级的问题怎么处理?
6 楼 qiezi 2008-02-18  
对了,用Ruby实现并发框架可以参考IoLanguage,它在底层也只是实现了Coroutine,调度器是在上层实现的,然后又优雅地把libevent(可以理解为epoll/select)和aio集成进来了,关键的胶合部分都是Coroutine。
5 楼 qiezi 2008-02-18  
我已经在打草稿了,只是很容易把话题扯得很长,超出我的把握之外。所以我打算用几个实例来比较基于事件、基于多线程和基于coroutine+actor的不同做法。

很多语言只提供了基本的coroutine,但没有提供调度器,Erlang的好处在于它把这个给完成了,甚至还是个smp版本的。

提纲我简单列一下:

1、状态机编程
2、多线程并发
3、基于事件的并发
4、使用coroutine+调度器的解决方案(Erlang和IoLanguage都算是这种方式)
5、coroutine+actor最佳拍挡
6、Erlang和IoLanguage在并发实现和语言抽象上的比较。
7、Ruby实现高并发框架的可能性


内容挺多,可能不是一篇能解决的。表达能力有限,很多东西我想明白了,却感觉把它说出来又是另一码事。今天刚上班,一周都会比较忙,晚上和周末抽空看看。
4 楼 robbin 2008-02-17  
引用
总之我现在觉得coroutine是并发的唯一出路,它能极大地简化并发和异步编程,仅为了并发就改变习惯使用另一种风格的语言


我对并发编程模型比较感兴趣,对你这段话印象很深刻,什么时候可以展开的解释为什么coroutine是并发编程的未来呢?ruby 1.9的Fiber似乎也是coroutine的方式,不知道ruby 1.9以后是如何编写并发程序的,而ruby又如何调度并发的。
3 楼 qiezi 2008-02-17  
补了一点:

引用

IoLanguage给我的最大帮助是帮我从Erlang的并发中脱离出来,很长一段时间我的脑子都跟着Erlang的spawn在跑,即便我想用其它语言来实现类似的并发,我也会选想到spawn。从IoLanguage的学习中我认清了并发、异步的目的,我们的目的不是为了创建进程,只是为了让它脱离当前执行序列来并行执行,有时候我们不想取得它的执行结果,有时候又需要这个结果,Erlang没有对这种差异或者类似的层次进行抽象。Erlang在这方面走了个极端,创建进程很容易,但处理结果相对麻烦,pmap给了我很深的印象,但远不如IoLanguage的优雅。这主要是由于Erlang的语言抽象能力有限造成的。
2 楼 qiezi 2008-02-17  
好哇,有时间我结合状态机和异步操作,讨论一下coroutine的解决办法,正好在研究IoLanguage,可以用它作例子,看它是如何优雅地把libevent和aio结合进来的。
1 楼 robbin 2008-02-17  
能不能多介绍一点coroutine的经验和见解?

相关推荐

    Erlang/OTP 26.2.1

    Erlang/OTP 26.2.1,Erlang,OTP,26.2.1

    Erlang / OTP 21.0 版本下载

    官网下载实在是困难,我把当前Erlang / OTP 21.0 版本提交到这里提供给大家和自己下载 原先积分0的现在都这么高了,为了方便大家,放出云盘地址:https://pan.百度.com/s/1hb8vPiMslXxNuJC8PvnKgg提取码wmx8

    Erlang/OTP reference

    ### Erlang/OTP系统文档概览与安装指南 #### 关于Erlang/OTP Erlang/OTP(Open Telecom Platform)是Ericsson AB自1997年起开发的一套强大的分布式软实时运行环境,主要设计用于构建高可用性、高并发、分布式应用...

    Designing for Scalability with Erlang/OTP

    This book is what you get if you put together an Erlang enthusiast who worked on the R1 release of OTP in 1996 and a Distributed Systems specialist who discovered Erlang/OTP

    Erlang/OTP Application完整例子

    Erlang/OTP Application完整例子,含代码和二进制,对于学习Erlang/OTP Application很有帮助。 配套文章http://blog.csdn.net/mycwq/article/details/12610677

    windows 32位和64位 Erlang 21.0.1下载

    This guide covers Erlang/OTP requirements, recommendations, caveats and commonly used installation sources. Unsupported Versions Erlang/OTP versions older than 19.3 are not supported by currently ...

    erlang otp25 win安装包

    erlang otp25 win安装包

    erlang 25.1 放入/root/.kerl/archives,直接./kerl build 25.1

    在Erlang的版本管理中,`kerl`是一个方便的工具,用于构建、安装和管理Erlang/OTP(Open Telecom Platform)的源代码版本。标签"erlang"表明讨论的核心是Erlang语言本身。文件名"otp_src_25.1"代表了OTP的源代码包,...

    Erlang26-windows安装包

    RabbitMQ version Minimum required Erlang/OTP Maximum supported Erlang/OTP Notes 3.13.0 26.0 26.2.x The 3.13 release series is compatible wtih Erlang 26. OpenSSL 3 support in Erlang is considered to ...

    Erlang-otp_win64_23.0.zip

    Erlang OTP是Erlang编程语言的核心组成部分,它提供了分布式计算、并发处理、热代码升级和容错恢复等一系列强大的功能。在安装RabbitMQ,一个广泛使用的开源消息代理和队列服务器之前,通常需要先安装Erlang环境。...

    otp, erlang/otp.zip

    otp, erlang/otp erlang/otp是一种编程语言和运行时系统,用于构建大规模可以伸缩软实时系统,具有高可用性。费 OTP是一套Erlang库,由Erlang运行时系统,大量的组件和一套Erlang程序设计原则组成。 了解更多关于...

    cowboy, 用于 erlang/otp的小型,快速,现代的HTTP服务器.zip

    cowboy, 用于 erlang/otp的小型,快速,现代的HTTP服务器 牛仔牛仔是一个小型。快速和现代的用于 erlang/otp的HTTP服务器。目标牛仔的目标是提供一个收费的完整的,以英镑为代价的小代码库。 系统以英镑低延迟和低...

    Erlang最新版本 otp-win64-25.0.3

    Erlang最新版本 25.0.3 windows 安装文件 解压直接安装 5个币-----------------------------------------------------------------------------------------------------------------------------------------------...

    Erlang/OTP 中文手册(R11B)

    **Erlang/OTP 中文手册(R11B)** Erlang是一种并发性极强的编程语言,尤其适用于构建分布式、容错且高度可扩展的系统。OTP(Open Telecom Platform)是Erlang的核心组件,提供了一套标准库、开发框架和设计模式,...

    (学成在线day05 RabbitMQ资料)Erlang/OTP20.3版本和RabbitMQ3.7.3

    【标题】:“(学成在线day05 RabbitMQ资料)Erlang/OTP20.3版本和RabbitMQ3.7.3” 【描述】:“(学成在线day05 RabbitMQ资料)Erlang/OTP20.3版本和RabbitMQ3.7.3”这个资料包显然关注的是两个核心主题:Erlang OTP ...

    erlang-otp-win64位 25.3版本

    Erlang OTP是Erlang编程语言的核心组件,它提供了强大的并发处理、分布式计算和容错能力,广泛应用于电信、互联网服务以及实时系统等领域。在Windows操作系统上,Erlang OTP通常提供为预编译的64位版本,如"erlang-...

    基于cowboy(Small, fast, modernHTTPserver for Erlang/OTP)的即时聊天后端服务

    使用erlang和PostgreSQL做后端、flutter做前端开发的一款开源的即时聊天解决方案(基于erlang/otp的高性能web框架 cowboy 做后端服务,用 "8核16G 主机(100万PPS)"压测,保持100万+TCP稳定在线90分钟以上) 支持...

    erlang-otp_win64_23.0.zip

    此版本为window64位下的,erlang23版本,erlang-otp_win64_23.0,官网原包,官网太难找了,好不容易找到,和大家分享下,需要的可以下载,也作为自己的一个记录吧,自己亲测很好用,erlang环境需要与对应的rabbitmq...

Global site tag (gtag.js) - Google Analytics