libgo協程庫:網絡性能完爆ASIO異步模型(-O3測試)


  在purecpp社區的github組織中有一個協程庫:https://github.com/yyzybb537/libgo

  近日有用戶找到我,想要了解一下libgo庫在網絡方面的性能,於是選取已入選標准庫的boost.asio網絡庫的異步模型做橫向對比。

  在小包和利用多核方面,libgo庫的網絡性能完爆asio異步模型,8線程處理小包時差距可達十幾倍。

      在大包+單線程的情況,libgo庫的網絡比asio異步模型高的不是很多,在一些性能比較差的PC機上,甚至出現性能。

簡要介紹一下測試流程:

  1.TCP協議,C/S是同一台物理機的兩個進程,建立1000條連接

  2.服務的是echo服務器,收到數據原樣發回,客戶端無限次發送指定大小的數據包,測試取樣包大小為:4字節、32字節、128字節、1024字節、4096字節

  3.分不同線程數測試,測試取樣線程數為:單線程,2線程,4線程,8線程

  4.用於對比測試的服務端程序分別為:

    A)用libgo+syscall編寫

    B) 用boost.asio異步模型編寫

  5.使用同樣的客戶端程序,以減少干擾

  5.測試環境是一台擁有2顆6核12線程CPU的物理機服務器,共24個邏輯線程,Linux系統版本為:CentOS 6.2。

       (核心較少的PC機無法發揮libgo的優勢,測試結果差距會縮小)

 

測試結果圖:

      

  

 

本次測試,並不能說明Asio的性能就一定比libgo庫的網絡性能更差,Asio是對系統調用的一層封裝,很nice的設計,留給用戶很大的優化余地;

花大力氣去調優Asio,也是有希望達到甚至超越libgo庫的網絡性能的。

在實際使用libgo庫時,我更加推薦的是libgo+Asio同步模型的使用方式,性能與開發效率二者可以兼得,而不是從系統調用寫起,已開源libgonet網絡庫!

 

本次測試所用服務端為git庫中的benchmark/co_server.cpp和benchmark/asio/async_asio_server.cpp  客戶端代碼為: benchmark/co_client.cpp

libgo+Asio同步的使用示例在benchmark/asio_sync目錄下

社區交流群:296561497

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM