zoukankan      html  css  js  c++  java
  • 很好的设计-服务端网络请求处理模型

    几个月前学习了公司内部的网络编程框架,以为记住了,时间久了却忘了,所以在此记录下。

    架构的主体是生产-消费模式,生产者负责接收请求建立连接,消费者(也即工作线程)负责处理请求做出响应。

    POOL-1


    连接队列-保存已建立连接还未有数据到来的sockfd;待处理队列-保存有数据到来的sockfd。

    监听线程:

    监听listen sockfd并accept新建立的连接,如连接队列已满,则关闭新连接并报错。正常则放入连接队列,并向epoll fd注册监听事件。

    利用epoll监听所有已建立连接,有EPOLLIN事件(表示某sockfd有数据过来)时,将该sockfd挪到待处理队列,如果待处理队列満了,则关闭该sockfd;收到EPOLLHUP(sockfd被挂断)和EPOLLERR(sockfd发生错误)时,将sockfd关闭,并从epollfd、连接队列中剔除。

    定期检查连接队列中的sockfd,空闲时间超过阈值,关闭sockfd,从epollfd、连接队列中剔除。

    工作线程:

    不停的从待处理队列中获取sockfd,处理成功后,设置是长连接则将此sockfd放入连接队列并注册到epoll fd;如果是短连接直接关闭sockfd。

    POOL-2


    监听线程:监听listen sockfd并accept新连接,将新连接注册到监控sockfd最少的网络IO线程中。

    网络IO线程:将EPOLLIN的sockfd放入对应的待处理队列。

    工作线程:获取sockfd,处理请求、响应请求。

    POOL-2支持多个epoll fd,可以更好的利用多CPU;多个(epollfd,连接队列,待处理队列)组降低了锁的粒度,提高并发性。

  • 相关阅读:
    VMware三个版本workstation、server、esxi的区别
    vmwarevsphere与vmwareworkstation的区别
    PubMed、MEDLINE和PMC
    1000个并发线程,10台机器,每台机器4核,设计线程池大小(转)
    Internet与Intranet
    VMware安装操作系统鼠标失灵
    超详细SQL SERVER 2016跨网段和局域网发布订阅配置图解和常见问题
    一篇理解什么是CanSet, CanAddr?
    collection v1.3.1升级全记录
    我写的诗
  • 原文地址:https://www.cnblogs.com/whuqin/p/4981983.html
Copyright © 2011-2022 走看看