釋出個 golang 高效能非同步網路框架 nbio,單機百萬不是夢!
專案地址
主要特點:高效能、事件驅動、易用易擴充套件、省協程省記憶體、節能環保
關於另一個框架
設計與實現的一些基本思考和細節方案
- 跨平臺支援:*nix 用 epoll、kqueue, windows 用的 std/net
- epoll LT,單次讀最大可配,避免餓死
- epoll 沒有使用 trigger 模式,因為較新版本的核心 epoll 相關係統呼叫以及其他並行流 close 都是安全的,trigger 模式的無鎖對效能提升也是偽命題,額外的系統呼叫以及核心部分的鎖仍然是開銷,應用層有鎖並且單個 Conn 競爭幾乎可以忽略,所以 trigger 模式未必有優勢
- Write 是直接寫,寫失敗才掛到 Conn 的佇列,再新增寫事件,可寫、flush 後清理掉寫事件,儘量減少了 epoll/kqueue 的系統呼叫
- 支援 writev
- 實現了 net.Conn,支援 DeadLine ,併發安全,也方便業務層多個並行流隨意操作
- 連線的管理,*nix 直接是 fd 做陣列下標對應 Conn
- 讀緩衝、應用層最大寫緩衝都可配
- 用於讀取的記憶體分配可由應用層定製,方便業務層做更適合的定製,這個不同場景可以玩很多姿勢,簡單的 pool 未必是最優
- Conn 提供 Hash 方法,方便業務層用於訊息分發到指定協程進行處理,從而保證每個連線的訊息處理有序
- 單獨的 heap timer,不使用 time.AfterFunc 節約協程
- 支援管理標準庫的 net.Conn,比如使用 net.Listener Accept 或者 net.Dial 得到 net.Conn 放到 nbio.Gopher 裡管理讀寫
- 最少依賴,除了 tls 作為擴充套件是需要依賴我的另一個倉庫以及 go1.6,單純作為非同步框架,nbio 只依賴標準庫
- server-side/client-side 都支援
- 可定製、擴充套件的挺多的,不一一列舉
與其他一些 golang 非同步網路框架對比
- 效能:我這裡同樣配置、引數壓測,nbio qps 基本最高,多個框架的 pprof 分析,nbio 的 syscall read/write 佔比應該是最高的,進入到 syscall 後的部分是框架層沒法再優化的,這說明同一段時間內,nbio 更多的時間是在執行系統呼叫進行讀寫、框架本身的消耗佔比小於其他框架
- 易用性:nbio 實現了 net.Conn,更加業務友好、方便擴充套件定製,所以我最近花了幾天把 go 1.6 std 的 crypto/tls copy 了一份,並重寫支援了 nbio 的 tls server-side、server-side,標準哭 tls 的讀寫 buffer 有點浪費,還有不少優化空間,但是暫時夠用、不著急進一步魔改優化。
- 後續還考慮標準庫的 http 是否也魔改一下支援非同步,但是如果要改,工程量有點大,也是得慢慢搞了
一些例子
1. 使用 nbio 管理標準庫 net.Conn
2. Echo
3. TLS Examples
更多示例請參考文件和程式碼
歡迎關注
- 歡迎 issue / pr / fork , star 更好
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- golang 網路框架之 thriftGolang框架
- golang 網路框架之 grpcGolang框架RPC
- 網路IO之阻塞、非阻塞、同步、非同步總結非同步
- 微夢森網路-基於3.1.2框架框架
- Yii1.1.4釋出,高效能的PHP框架PHP框架
- Golang 網路爬蟲框架gocolly/collyGolang爬蟲框架
- 短影片本地生活團購專案,讓你年入百萬不是夢!
- 高效能 Jsonpath 框架,Snack3 3.2.57 釋出JSON框架
- IT大佬總結大資料個學習階段,每天兩小時,年薪百萬不是夢大資料
- 手握Kimi和剪映,成為百萬粉絲電影博主不是夢
- 網路真不是個好東西
- 同步、非同步、阻塞、非阻塞的簡單理解非同步
- 高效能非同步框架Celery入坑指南非同步框架
- RPC框架/高效能遠端同步呼叫框架/分散式服務框架RPC框架分散式
- 爬蟲(9) - Scrapy框架(1) | Scrapy 非同步網路爬蟲框架爬蟲框架非同步
- 網際網路協會治流氓軟體 定期釋出黑名單(轉)
- golang-web框架revel一個表單提交的總結GolangWeb框架
- SecBench:首個網路安全大模型評測平臺釋出大模型
- zan正式開源,非同步+非阻塞的PHP框架非同步PHP框架
- golang 高併發非同步tcp 框架求推薦?Golang非同步TCP框架
- C++ 高效能伺服器網路框架設計細節C++伺服器框架
- 騰訊 Node.js 非侵入開發框架 Tars.js 2.0 正式釋出Node.js框架
- [非專業翻譯] 高效能物件對映框架 - Mapster物件框架
- 構建工業網際網路安全防線,綠盟科技正式釋出“綠盟工業網際網路安全能力框架”框架
- 單一docker主機網路Docker
- Reactor: Spring釋出基於JVM的非同步事件驅動框架ReactSpringJVM非同步事件框架
- 釋出會結束了,百萬紅包來襲!!
- golang web框架,golang版本laravel 框架GolangWeb框架Laravel
- gorpc: 一個簡單,易用,高效能,可插拔的微服務框架GoRPC微服務框架
- CoreFlex框架釋出 `0.1.1`Flex框架
- okhttp網路請求框架的簡單使用HTTP框架
- 用Keras框架構建一個簡單的卷積神經網路!Keras框架架構卷積神經網路
- 重新開始釋出網路日誌
- 從單個同步降壓轉換器生成多個輸出非常簡單
- 網際網路協會與IDGVC釋出Web2.0 100(附名單)Web
- 每個程式設計師都有一個框架夢程式設計師框架
- 理解高效能網路模型模型
- 在阿里雲上單機使用Nginx負載均衡釋出網站阿里Nginx負載網站