使用 Go 语言来提升 Ruby 应用的性能
泥牛, 重刃无锋, BruceLinxu, 无若 · · 5411 次点击 · · 开始浏览近年来,Go语言的表现相当引人注目。它与Ruby的差异明显,Go的优势,例如成本低廉且易用的并发性能,使得我们寻找如何使用的方法,应用到处理工作任务中去。本文着重于阐述能够引领你在ruby应用程序中使用Go的理由。并且会深入细节,我会提供我的启动项目Firmapi的源代码。
Go可以为ruby开发者带来什么
更准确的说,Go可以给你的ruby代码带来什么
1.低成本且易用的并发
按照Go的设计,几十个(甚至上千个)并发操作能够轻而易举的实现。它能够充分利用所有CPU的优势。
尽管使用ruby早就可以处理线程操作了,但是其处理结果远比不上Go:Ruby使用的是绿色线程,(即只有一个CPU得到利用),这与Go的channels方式相去甚远。
BruceLinxu
翻译于 5天前
0人顶
翻译的不错哦!
1. Go 方面
我们期望Go程序能返回一个JSON,用Ruby解析标准化输出,这有个例子。
虽然有很多复杂的好用的程序用的是自有变量,但是中心思想不会变了。
2. Ruby 方面
Ruby 代码则可精简到一行 :
为了保持井井有条,Go程序会被放在自己的文件夹里。这样部署起来容易点。然后写一个执行对应的Go程序的类,来解析和响应JSON。在生产环境中则会用二进制包来增加执行效率。下面是一则类的可能:
用method_missing这个类,在不改变Ruby代码的情况下,让新的Go程序跑起来。开发者只需按照这个规则,添加新程序就可以了。
重刃无锋
翻译于 3天前
0人顶
翻译的不错哦!
怎么组织代码?
笔者赞成直接把Go代码包含到你的主资源库内。如果要添加的程序的大小和范围所剩无几,你可以使用源控制来多获取一些。主要是Ruby程序和Go程序之间的版本要不一致。例子中,我把代码保存到: my_app/go/program1/
部署
用Go构建程序,Go生成的二进制包既可以在本地环境运行,也可以在产品上运行。唯一的问题是怎样部署这些文件:即可以上传到云存储上(如Amazon S3),然后在部署环境上依次下载,也可以直接上传到部署环境。在我们的例子中,我们添加定制任务到 Capistrano (戳这里看脚本 用的是上传到S3的方法) :
重刃无锋
翻译于 2天前
0人顶
翻译的不错哦!
在服务器上不用采取任何措施。 对于GO的版本,GOPATH等等,没有依赖。它是完美的!
结论
学习Go可能会带给你在当前Ruby中解决问题的思路,而不会带来另外的设置上的麻烦。我特别推荐看一下那些比较好的Go例程和专栏。
我期盼通过这条途径得到(你的)反馈! 你可以在Twitter上找到我 : @antoinefink 或者发(E-mail) antoine@finkelstein.fr.
无若
翻译于 5天前
0人顶
翻译的不错哦!
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
近年来,Go语言的表现相当引人注目。它与Ruby的差异明显,Go的优势,例如成本低廉且易用的并发性能,使得我们寻找如何使用的方法,应用到处理工作任务中去。本文着重于阐述能够引领你在ruby应用程序中使用Go的理由。并且会深入细节,我会提供我的启动项目Firmapi的源代码。
Go可以为ruby开发者带来什么
更准确的说,Go可以给你的ruby代码带来什么
1.低成本且易用的并发
按照Go的设计,几十个(甚至上千个)并发操作能够轻而易举的实现。它能够充分利用所有CPU的优势。
尽管使用ruby早就可以处理线程操作了,但是其处理结果远比不上Go:Ruby使用的是绿色线程,(即只有一个CPU得到利用),这与Go的channels方式相去甚远。
BruceLinxu
翻译于 5天前
0人顶
翻译的不错哦!
1. Go 方面
我们期望Go程序能返回一个JSON,用Ruby解析标准化输出,这有个例子。
虽然有很多复杂的好用的程序用的是自有变量,但是中心思想不会变了。
2. Ruby 方面
Ruby 代码则可精简到一行 :
为了保持井井有条,Go程序会被放在自己的文件夹里。这样部署起来容易点。然后写一个执行对应的Go程序的类,来解析和响应JSON。在生产环境中则会用二进制包来增加执行效率。下面是一则类的可能:
用method_missing这个类,在不改变Ruby代码的情况下,让新的Go程序跑起来。开发者只需按照这个规则,添加新程序就可以了。
重刃无锋
翻译于 3天前
0人顶
翻译的不错哦!
怎么组织代码?
笔者赞成直接把Go代码包含到你的主资源库内。如果要添加的程序的大小和范围所剩无几,你可以使用源控制来多获取一些。主要是Ruby程序和Go程序之间的版本要不一致。例子中,我把代码保存到: my_app/go/program1/
部署
用Go构建程序,Go生成的二进制包既可以在本地环境运行,也可以在产品上运行。唯一的问题是怎样部署这些文件:即可以上传到云存储上(如Amazon S3),然后在部署环境上依次下载,也可以直接上传到部署环境。在我们的例子中,我们添加定制任务到 Capistrano (戳这里看脚本 用的是上传到S3的方法) :
重刃无锋
翻译于 2天前
0人顶
翻译的不错哦!
在服务器上不用采取任何措施。 对于GO的版本,GOPATH等等,没有依赖。它是完美的!
结论
学习Go可能会带给你在当前Ruby中解决问题的思路,而不会带来另外的设置上的麻烦。我特别推荐看一下那些比较好的Go例程和专栏。
我期盼通过这条途径得到(你的)反馈! 你可以在Twitter上找到我 : @antoinefink 或者发(E-mail) antoine@finkelstein.fr.
无若
翻译于 5天前
0人顶
翻译的不错哦!
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们