seastar與go的http效能差異

2021-09-22 23:10:58 字數 1576 閱讀 2806

golang的coroutine好用,但是coroutine本身切換是需要有代價的,主要體現在記憶體棧的上下文切換。之前看過乙個c++的go風格的庫,叫libgo, 根據其github主頁的benchmark,協程切換速率是要優於go的。但是這篇文章並非要和libgo比較,由於筆者之前接觸過scylladb,對seastar這個c++框架念念不忘,下面就來對比一下兩者差異

os:ubuntu 18.04

go: 1.12

seastar: 18.08 (非dpdk模式) (從seastar fork出來的可以編譯通過的分支)

下面是qps比較:

wrk 併發連線

下面是qps比較:

wrk 併發連線

3050

100seastar 2thread

167313

170687

171913

golang 2thread

92529

95436

92773

上面只是乙個簡單的測試,足以看到seastar的威力,效能接近go的兩倍。對於http api服務,seastar的效能基本無敵,所以阿里的x-deeplearning推薦框架用了seastar來做引數伺服器的後端框架(ps: 但是x-deeplearning用的blaze推理後端框架是libevent, 這操作就有點昏了~~)但是開發效率不如go。go的效能雖然稍微差一點,但是勝在開發效率優於c++。由於實際開發的時候,網路棧的處理延時遠小於rpc/dbquery的等待時間,從實用的角度來看,go其實還是很棒的。

seastar在openEuler上的系統移植

seastar git clone dpdk git clone c ares git clone fmt git clone 找到目標原始碼合適版本是編譯嘗試出來的,採用編譯錯誤版本最少的乙個版本。這裡找到的版本是 seastar 18.08 branch git branch a git che...

go網路程式設計 http程式設計

一 web工作流程 web伺服器的工作原理可以簡單歸納為 1.客戶端通過tcp ip協議與伺服器建立連線 2.客戶端向伺服器傳送http協議請求包,請求伺服器裡的文件資源 3.伺服器向客戶端傳送http協議應答包,如果請求的資源中包含動態語言的內容,那麼伺服器會呼叫動態語言的解釋引擎負責處理 動態內...

c呼叫go完成http請求

最近在把流 伺服器做靜態鏈結,但是流 伺服器裡面用到了curl做http請求,然後curl又引用了zlib,ssl庫,mmp,做靜態鏈結神煩。於是想到了用go做乙個靜態庫,然後呼叫。go編譯靜態庫 先搞乙個實現的檔案,如下 package main 包名必須是main func main 必須定義乙...