`
qiezi
  • 浏览: 502029 次
  • 性别: 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 [✓] F# [✓] Go [✓] Haskell [✓] Hy [ ] Idris [✓] Io [✓] Java [✓] JavaScript (NodeJS) [✓] Kotlin [✓] Lua [✓] Nim [✓] Objective-C [✓] OCaml [✓] Perl [✓] Python [✓] Ruby [✓] ...

    thrift源码+DEMO+简单教程

    支持的语言包括C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk等。生成的代码包含了服务接口、数据结构的序列化/反序列化方法以及必要的客户端和服务端通信逻辑。 例如,如果你用...

    MATLAB中的紧束缚模型求解器.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    模型量化校准数据集-ImageNet2012分类图片100张

    从ImageNet2012分类数据集中选取的100张图片,用于对常见分类模型进行量化。 数据集介绍 数据背景: 静态离线量化方法需要少量校准数据,这个数据集用于量化演示示例。 数据来源: 基于Imagenet2012测试数据集,取前100张图片和标签作为本数据集。

    ### 【计算机组成原理】计算机发展历程与关键技术解析:从冯·诺依曼架构到量子计算的未来展望

    内容概要:本文详细介绍了计算机的发展历程及其核心组成部分,从早期计算工具的演进到现代计算机的诞生,重点探讨了冯·诺依曼体系结构的重要性。文章回顾了从机械计算器、ENIAC到微处理器的科技进步,阐述了计算机五大组成部分(运算器、控制器、存储器、输入设备、输出设备)的功能与协作机制。同时,文中还讨论了操作系统、编程语言、数据库管理系统等软件层面的内容,以及量子计算和神经形态计算等前沿技术对未来计算机发展的影响。; 适合人群:计算机专业学生、计算机爱好者及对计算机技术感兴趣的读者。; 使用场景及目标:①帮助读者理解计算机硬件的基本组成和工作原理;②解释软件与硬件之间的协同关系;③介绍量子计算和神经形态计算等新兴技术的发展趋势及挑战。; 其他说明:掌握计算机组成原理有助于读者深入了解计算机系统的工作机制,培养硬件思维和系统思维,为后续学习操作系统、编译原理、计算机网络等课程打下坚实基础。同时,对于广大计算机爱好者而言,了解计算机组成原理可以让他们更好地理解计算机的运行机制,在使用计算机的过程中更加得心应手。

    中国移动2024年6G通感算智融合技术体系白皮书1.053页.pdf

    中国移动2024年6G通感算智融合技术体系白皮书1.053页.pdf

    汽车电子:MATLAB_开发电池管理系统SOC估算算法.pdf

    文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 你是否渴望高效解决复杂的数学计算、数据分析难题?MATLAB 就是你的得力助手!作为一款强大的技术计算软件,MATLAB 集数值分析、矩阵运算、信号处理等多功能于一身,广泛应用于工程、科学研究等众多领域。 其简洁直观的编程环境,让代码编写如同行云流水。丰富的函数库和工具箱,为你节省大量时间和精力。无论是新手入门,还是资深专家,都能借助 MATLAB 挖掘数据背后的价值,创新科技成果。别再犹豫,拥抱 MATLAB,开启你的科技探索之旅!

    通信工程分包合同.docx

    通信工程分包合同.docx

    基于Qt+C++实现的物联网景区地质灾害监测系统+源码+项目文档(毕业设计&课程设计&项目开发)

    基于Qt+C++实现的物联网景区地质灾害监测系统+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 本项目利用Zigbee协议搭建了专属物联网,搭建了以Cortex-A8为主核的本地网关,租用阿里云组建系统服务器,并建立了相关网站。监测中心站通过客户端监控易发灾害点数据,在灾害爆发前做好预防工作;普通用户可以通过网站查看各项数据。 基于Qt+C++实现的物联网景区地质灾害监测系统+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 本项目利用Zigbee协议搭建了专属物联网,搭建了以Cortex-A8为主核的本地网关,租用阿里云组建系统服务器,并建立了相关网站。监测中心站通过客户端监控易发灾害点数据,在灾害爆发前做好预防工作;普通用户可以通过网站查看各项数据

    CNC-控制器-STM32-开源项目

    CNC_控制器_STM32_开源项目

    世邦魏理仕:2022年北京房地产市场回顾与2023年展望.pdf

    世邦魏理仕:2022年北京房地产市场回顾与2023年展望

    科学发展观与建筑企业管理论文.docx

    科学发展观与建筑企业管理论文.docx

    Epson-L130-Series

    爱普生L130

    基于javaScript+Springboot+Vue实现的校园社团信息管理系统+源码+演示视频+项目文档(毕业设计&课程设计&项目开发)

    基于javaScript+Springboot+Vue实现的校园社团信息管理系统+源码+演示视频+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 园社团信息管理系统管理员功能有个人中心,学生管理,社长管理,社团分类管理,社团信息管理,加入社团管理,社团成员管理,社团活动管理,活动报名管理,系统管理等。社长添加社团,管理员审核社团,学生加入社团,社长审核社团。因而具有一定的实用性。 本站是一个B/S模式系统,采用Spring Boot框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得校园社团信息管理系统管理工作系统化、规范化。本系统的使用使管理人员从繁重的工作中解脱出来,实现无纸化办公,能够有效的提高校园社团信息管理系统管理效率。

    apk文件.zip

    apk文件

    JDK1.7及之前HashMap的put方法图解.png

    JDK1.7及之前HashMap的put方法图解

    珠宝鉴定:MATLAB高光谱成像在宝石内部包裹体分析中的实践.pdf

    文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 你是否渴望高效解决复杂的数学计算、数据分析难题?MATLAB 就是你的得力助手!作为一款强大的技术计算软件,MATLAB 集数值分析、矩阵运算、信号处理等多功能于一身,广泛应用于工程、科学研究等众多领域。 其简洁直观的编程环境,让代码编写如同行云流水。丰富的函数库和工具箱,为你节省大量时间和精力。无论是新手入门,还是资深专家,都能借助 MATLAB 挖掘数据背后的价值,创新科技成果。别再犹豫,拥抱 MATLAB,开启你的科技探索之旅!

    基于MATLAB_的无人机编队协同控制算法开发与半实物仿真.pdf

    文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 你是否渴望高效解决复杂的数学计算、数据分析难题?MATLAB 就是你的得力助手!作为一款强大的技术计算软件,MATLAB 集数值分析、矩阵运算、信号处理等多功能于一身,广泛应用于工程、科学研究等众多领域。 其简洁直观的编程环境,让代码编写如同行云流水。丰富的函数库和工具箱,为你节省大量时间和精力。无论是新手入门,还是资深专家,都能借助 MATLAB 挖掘数据背后的价值,创新科技成果。别再犹豫,拥抱 MATLAB,开启你的科技探索之旅!

    Epson-L301303.zip

    Epson_L301303.zip

Global site tag (gtag.js) - Google Analytics