gnet 介绍

gnet 介绍

gnet 简介

gnet 是一个基于事件驱动的高性能和轻量级网络框架 ,它是自己通过原生epollkqueue 的系统调用来构建网络应用,并没有使用Go 的标准net 库,以此来规避海量连接下原生net库 创建大量协程带来的大内存占用以及调度压力增加的问题,gnet 压测下表现的性能也是远超过了Go 标准库netgnet是衍生自Go 的另一个网络库evio ,但它解决了evio 一些bug ,做了一些优化(减少不必要的唤醒,减少内存拷贝),用multi-reactors 模型替换掉了之前的网络模型,加入了goroutine poll,因此gnet 作为后起之秀会有更好的表现,并且在我阅读它源代码的过程中发现作者对gnet 的设计很好,大部分还是简单易懂的,比较适合用来学习项目的设计,github 地址在这:gnet,它支持以下功能:

  • 高性能 的基于多线程/Go程网络模型的 event-loop 事件驱动
  • 内置 goroutine 池,由开源库 ants 提供支持
  • 内置 bytes 内存池,由开源库 bytebufferpool 提供支持
  • 整个生命周期是无锁的
  • 简单易用的 APIs
  • 基于 Ring-Buffer 的高效且可重用的内存 buffer
  • 支持多种网络协议/IPC 机制:TCPUDPUnix Domain Socket
  • 支持多种负载均衡算法:Round-Robin(轮询)Source-Addr-Hash(源地址哈希)Least-Connections(最少连接数)
  • 支持两种事件驱动机制:Linux 里的 epoll 以及 FreeBSD/DragonFly/Darwin 里的 kqueue
  • 支持异步写操作
  • 灵活的事件定时器
  • SO_REUSEPORT 端口重用
  • 内置多种编解码器,支持对 TCP 数据流分包:LineBasedFrameCodec, DelimiterBasedFrameCodec, FixedLengthFrameCodec 和 LengthFieldBasedFrameCodec,参考自 netty codec,而且支持自定制编解码器

这节就先了解一下gnet 的架构设计,看看它底层的设计是如何支撑起它如此高的性能的。

gnet 架构设计

gnet 架构图:

图片说明

运行时序图:

图片说明

从上图可以看出 的架构设计是 模式,客户端发起连接后由主 之后通过负载均衡算法分配给某个从,加入这个从 的连接池 ,每个从负责自己连接池里面的连接的 和 操作。主 和 每个从 内部都有一个,主 的 将会在新连接到来的时候被唤醒然后一个连接 之后通过的系统调用将这个连接注册到

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

go高薪必备:面试框架17讲 文章被收录于专栏

<p> <span style="font-size:14px;">本专刊是Go开源项目源码分析专栏,共 17 篇文章,挑选了Go 开源界知名的 4 个开源项目gnet(高效的网络库)、gin(知名的Go微型web框架)、fasthttp(高性能web框架)、nsq(Go消息队列)来对它们进行源码分析,分析它们的设计思想和代码实现。每个项目的讲解都是由浅入深,由设计思想的剖析到源码实现的分析,更易于读者理解。</span> </p> <p> <br /> </p> <h2> <b><span style="font-size:16px;line-height:1;">购买须知:</span></b> </h2> <span style="font-size:14px;">订阅成功后,用户即可通过牛客网 PC 端、App 端享有永久阅读的权限;</span><br /> <span style="font-size:14px;">牛客专刊为虚拟内容服务,订阅成功后概不退款;</span><br /> <span style="font-size:14px;line-height:1;">在专刊阅</span><span style="font-size:14px;line-height:1;">读过程中,如有任何问题,可在文章评论区底部留言,或添加牛客导师,加入读者交流群;</span><br /> <span style="font-size:14px;">想成为牛客作者,请邮件联系yinxiaoxiao@nowcoder.com,邮件主题【牛客作者+写作方向】,并附上个人简历一份及近期作品一份;</span><br /> <p> <span style="font-size:14px;">牛客专刊版权归本平台所有,任何机构、媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发布 / 发表,违者将依法追究责任</span><span style="font-size:14px;">。</span> </p> <p> <br /> </p>

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务