一个golang异步框架

源码地址

NioGin是一个异步http server,http协议处理、路由查找、中间件等都使用Gin框架的实现,只是底层的套接字管理替换为non-blocking io模式,即eventloop。所有的使用习惯与Gin均一致。

本项目主要参考和使用了Thanks To中的项目,适用于学习eventloop的实现,以及对单机性能要求较高的场景。代码注释和实现逻辑描述比较清楚,比nbio和gev学习起来更方便。性能理论上比gev要强,没有nbio混乱的engine,request读取使用的是官方包的方法,比较清晰;因此可以方便地利用Gin的router、middleware、Context封装,得到一个功能完善的http server。

设计原理:

1、Listener放在独立的epoll_wait中,监听新的连接请求,accept获得新的连接后,分发到workers(工作循环)监听新连接的读写事件;

2、工作循环(workers)分为两类,即非共享型和共享型;

3、非共享型worker,在一个时刻只绑定和监听一个新连接;

4、共享型worker,在同一个时刻可以绑定和监听多个新连接,允许同时处理固定多个读写事件任务;

5、新连接分发逻辑是:优先分发到空闲的非共享型worker上,如果没有空闲的非共享型worker,则会优先分发到已绑定的连接数最少的共享型worker上;

6、每个连接在触发读事件时,该连接的请求数+1;会通过调度来把共享型worker上请求数排名靠前的连接交换到非共享型worker上;这样可以优先用性能更好的非共享型worker处理请求频繁的连接;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值