我為什麼從python轉向go語言

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

我為什麼從python轉向go語言

 (2013-05-03 15:12:34) 轉載▼
標籤: 

go語言

 

python

 

it

分類: software

我為什麼從python轉向go語言

 

chenyehao@gmail.com

2013-5-3

 

標題總是要吸引眼球,其實我至今還是python的愛好者,每個人都需要用合適的工具解決特定問題。

 

我從2004年開始使用python,在那之前,我使用perl。python文法簡潔,支援物件導向,支援異常處理,豐富的第三方程式碼程式庫,極大地提高了開發效率。在那以後,我一直使用python,開發企業軟體,自動化工具,和小網站。

 

然後在2012年,我加入看圖班(kantuban.com)這個創業公司,繼續使用python開發互連網產品。我們使用tornado來開發web的前台,以及後台服務。直到我使用tornado開發的後台服務遇上了效能瓶頸。

 

這是一個緩衝加上演算法的服務,需要從資料庫載入800萬條記錄到記憶體中,然後響應用戶端請求,在記憶體中計算出結果返回用戶端。這個服務佔用2.1G記憶體,初始化載入資料時間(也就是啟動時間)30分鐘。服務的平均回應時間在10ms以下。

 

問題是,python不支援利用多核的cpu,當執行個別耗時任務時,其它的請求被阻塞(在這裡非阻塞的編程模式不起作用,因為本身是密集計算,無法把計算任務推到進程之外)。如果依賴啟動多個執行個體來提高負載,則每個執行個體需要佔用2.1G記憶體,還要考慮進程間的資料同步。結論是,我們需要支援多線程多核的程式設計語言。如果一開始使用java,也許沒有這樣被動。

 

最後,我決定採用go語言。文法簡潔類似python,從語言上支援多核(無需寫代碼建立線程,只需要全域指定並發數),靜態語言更節省記憶體。

 

我花了一個多月,把代碼從python移植到go,基本上可以做到一行python代碼對應一行go代碼,移植並不困難,go的代碼也比較簡潔。新的go服務可以同時對外提供thrift和RESTful的介面。所有的努力都是值得的,我在這裡對比一下效能。

 

Python 2.6

Go 1.0.3

載入時間(分鐘:秒)

30:00

2:40

佔用記憶體

2.1G

700M

一個典型計算服務耗時

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.