日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
使用Go語言來提升Ruby應(yīng)用的性能

近年來,Go語言的表現(xiàn)相當(dāng)引人注目。它與Ruby的差異明顯,Go的優(yōu)勢,例如成本低廉且易用的并發(fā)性能,使得我們尋找如何使用的方法,應(yīng)用到處理工作任務(wù)中去。本文著重于闡述能夠***你在ruby應(yīng)用程序中使用Go的理由。并且會深入細節(jié),我會提供我的啟動項目Firmapi的源代碼。

網(wǎng)站建設(shè)、網(wǎng)站制作,成都做網(wǎng)站公司-成都創(chuàng)新互聯(lián)公司已向超過千家企業(yè)提供了,網(wǎng)站設(shè)計,網(wǎng)站制作,網(wǎng)絡(luò)營銷等服務(wù)!設(shè)計與技術(shù)結(jié)合,多年網(wǎng)站推廣經(jīng)驗,合理的價格為您打造企業(yè)品質(zhì)網(wǎng)站。

Go可以為ruby開發(fā)者帶來什么

更準確的說,Go可以給你的ruby代碼帶來什么

1.低成本且易用的并發(fā)

按照Go的設(shè)計,幾十個(甚至上千個)并發(fā)操作能夠輕而易舉的實現(xiàn)。它能夠充分利用所有CPU的優(yōu)勢。

盡管使用ruby早就可以處理線程操作了,但是其處理結(jié)果遠比不上Go:Ruby使用的是綠色線程,(即只有一個CPU得到利用),這與Go的channels方式相去甚遠。

2. 低內(nèi)存開銷

一個 Go 程序編譯出來也就幾 M 大小。他們能在***化“榨取”機器性能的同時高效的利用內(nèi)存。在 資源密集型任務(wù)中獨立的獲取輸入并返回計算結(jié)果 這類情況中,Golang 的表現(xiàn)堪稱***。你能輕松的啟動的多個程序,他們只有在需要時才被喚醒,同時還能得到非常不錯的性能。

3. 易于部署

Go 程序能在數(shù)秒內(nèi)被編譯成一個小的二進制文件。 無需任何依賴,他們就能被輕松部署到您的生產(chǎn)服務(wù)器上。稍后,我將在 Firmapi 上向您展示我們是如何將 Go 代碼部署到我們的服務(wù)器上的。

連通 Go 和 Ruby

已經(jīng)有 一個 gem 被發(fā)布出來,使之成為可能。但我還是決定不用它,因為我覺得(這個 gem)讓 Go 程序作為服務(wù)端在后臺運行,然后通過 Unix 域套接字來與前端的 Ruby 程序通信有點太麻煩了,***我嘗試了一個直截了當(dāng)?shù)姆椒?

其實非常簡單: 讓 Go 程序返回一個 JSON 格式的數(shù)據(jù),然后在 Ruby 程序里解析它。 這樣一來,我們就能用 Go 程序加速所有資源密集型任務(wù)了。他們將會在服務(wù)器上被編譯進二進制文件。這些 Go 程序在每次被調(diào)用之后都會返回一個 JSON 格式的數(shù)據(jù)給 Ruby 程序使用。

1.  Go 方面

我們期望Go程序能返回一個JSON,用Ruby解析標準化輸出,這有個例子。

雖然有很多復(fù)雜的好用的程序用的是自有變量,但是中心思想不會變了。

2.  Ruby 方面

Ruby 代碼則可精簡到一行 :

為了保持井井有條,Go程序會被放在自己的文件夾里。這樣部署起來容易點。然后寫一個執(zhí)行對應(yīng)的Go程序的類,來解析和響應(yīng)JSON。在生產(chǎn)環(huán)境中則會用二進制包來增加執(zhí)行效率。下面是一則類的可能:

用method_missing這個類,在不改變Ruby代碼的情況下,讓新的Go程序跑起來。開發(fā)者只需按照這個規(guī)則,添加新程序就可以了。

怎么組織代碼?

筆者贊成直接把Go代碼包含到你的主資源庫內(nèi)。如果要添加的程序的大小和范圍所剩無幾,你可以使用源控制來多獲取一些。主要是Ruby程序和Go程序之間的版本要不一致。例子中,我把代碼保存到: my_app/go/program1/

部署

用Go構(gòu)建程序,Go生成的二進制包既可以在本地環(huán)境運行,也可以在產(chǎn)品上運行。唯一的問題是怎樣部署這些文件:即可以上傳到云存儲上(如Amazon S3),然后在部署環(huán)境上依次下載,也可以直接上傳到部署環(huán)境。在我們的例子中,我們添加定制任務(wù)到 Capistrano (戳這里看腳本 用的是上傳到S3的方法) :

結(jié)論

學(xué)習(xí)Go可能會帶給你在當(dāng)前Ruby中解決問題的思路,而不會帶來另外的設(shè)置上的麻煩。我特別推薦看一下那些比較好的Go例程和專欄。

英文原文:Using Go to improve your Ruby application's performance


新聞標題:使用Go語言來提升Ruby應(yīng)用的性能
網(wǎng)頁地址:http://www.5511xx.com/article/cdpphpo.html