侧边栏壁纸
博主头像
微流 - 这里记录值得分享的内容

行动起来,活在当下

  • 累计撰写 16 篇文章
  • 累计创建 9 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录
Go

gnet:最快的网络框架

gnet

gnet 是什么?

gnet 是一款专为高性能与轻量化设计的网络框架,它基于 epollkqueue 技术构建,并且相较于 Go 语言标准库中的 net 包,它能够在减少内存使用的同时提供更高的性能。

gnet 的目标并不是要替代 Go 的 net 包,而是为了给那些对性能要求较高的网络服务提供一种新的选择。因此,在功能的广泛性方面,gnet 并不如 net 包那样全面,它仅提供了构建网络应用所必需的核心功能和简洁的 API 接口。同时,gnet 并没有追求成为一个全能型的网络框架,因为在这一领域,Go 的 net 包已经表现得相当出色。

gnet 的主要优势在于其作为一款高性能、轻量级且非阻塞的 Go 语言网络框架的身份,专注于传输层(如 TCP/UDP/Unix Domain Socket)的功能。开发者可以利用 gnet 实现各种应用层网络协议,例如 HTTP、RPC、Redis、WebSocket 等,从而构建自己的应用层网络服务。例如,通过在 gnet 基础上实现 HTTP 协议,可以搭建一个 HTTP 服务器或 Web 应用框架;通过实现 Redis 协议,则可以创建一个自定义的 Redis 服务器。

gnet 的特性

  • 高性能事件驱动循环,支持多线程/协程模型

  • 内置由 ants 库支持的协程池

  • 无锁设计贯穿始终

  • 提供简单易用的 API

  • 高效且可自动扩展的内存缓冲区

  • 支持 TCP、UDP 和 Unix Domain Socket

  • 多种负载均衡策略,如轮询、源地址哈希和最少连接数

  • 灵活的事件计时器机制

  • 支持 gnet 客户端

  • 兼容 Linux、macOS、Windows 和 *BSD 系统

  • 支持多地址绑定

  • 添加 TLS 支持

  • 引入 io_uring

  • 支持 KCP 协议

性能测试

TechEmpower 性能测试

# 硬件环境
28 HT Cores Intel(R) Xeon(R) Gold 5120 CPU @ 3.20GHz
32GB RAM
Dedicated Cisco 10-gigabit Ethernet switch
Debian 12 "bookworm"
Go1.19.x linux/amd64

img

这是包含全部编程语言框架的性能排名前 50 的结果,总榜单包含了全世界共计 486 个框架,其中 gnet 排名第一

img

这是 Go 语言分类下的全部排名,gnet 超越了其他所有框架,位列第一,是最快的 Go 网络框架。

完整的排行可以通过 TechEmpower Benchmark Round 22 查看。

总结

gnet 是一个高性能且轻量级的网络框架,特别适合对性能有极高要求的网络应用场景。其性能显著优于 Go 语言自带的网络库,并且在全球权威的性能测试平台 TechEmpower 的排行榜上成绩斐然:在所有编程语言中位列第一,在 Go 语言类别中也拔得头筹。如果你正在使用 Go 语言开发网络应用程序并且对性能有着严苛的要求,那么 gnet 必将是你的理想之选,不妨尝试一下吧!


1
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区