TCP并发服务器构建

  • 单循环服务器:服务端同一时刻只能处理一个客户端的任务
  • 并发服务器:服务端同一时刻可以处理多个客户端的任务
  • TCP服务端并发模型
    • 多进程
  • 进程资源开销大,安全性高
    • 多线程
  • 线程相对于进程资源开销小,相同资源环境下,并发量比进程大
    • 线程池
      • 为了解决多进程多线程模型在服务器运行过程中,频繁创建和销毁进程线程带来的时间消耗问题
      • 基于生产者和消费者编程模型,以及任务队列,实现的一套多线程框架
    • IO多路复用
      • 对多个文件描述符的读写可以复用一个进程

      • 在不创建新的进程线程的前提下,使用一个进程实现对多个文件读写的同时监测

      • select实现IO多路复用

        • 创建文件描述符集合
        • 添加关注的文件描述符到集合
        • 使用select传递集合表给内核,内核开始监测事件
        • 当内核监测到事件时,应用层select将解除阻塞,并获得相关的事件结果
        • 根据select返回的结果做不同的情况处理
      • 函数接口

        • void FD_CLR(int fd, fd_set *set); 从集合中移除描述符
        • int FD_ISSET(int fd,fd_set *set); 检查描述符是否在集合中
        • void FD_SET(int fd, fd_set *set); 添加描述符到集合
        • void FD_ZERO(fd_set *set) 清空集合
        • select :int select(int nfds,fd_set*readfds,fd_set *writefdsfd_set *exceptfds, struct timeval *timeout)
          • 功能:传递文件描述符结合表给内核并等待获取事件结果
          • 参数:
            • nfds:关注的最大文件描述符+1;
            • readfds:读事件的文件描述符集合;
            • writefds:写事件的文件描述符集合;
            • exceptfds:其他事件的文件描述符集合;
            • timeout:设置select监测时的超时时间;NULL:不设置超时时间(select一直阻塞等待)
          • 返回值:成功:返回内核监测的到达事件的个数;失败:-1;0:超时时间到达,但没有事件发生,则返回0
      • select的优缺点

        • 优点:
          • 跨平台:几乎所有Unix-like系统都支持
          • 简单易用:API相对简单,易于理解
          • 超时控制:可以设置精确的超时时间
        • 缺点:
          • 性能问题:每次调用都需要遍历所有描述符
          • 描述符限制:FD_SETSIZE通常限制为1024
          • 内存拷贝:每次调用都需要在用户空间和内核空间之间拷贝fd_set
          • 线性扫描:需要遍历所有描述符来检查状态
相关推荐
数据库小学妹12 分钟前
MySQL ORDER BY 深度解析:Using temporary 与 Using filesort 的底层机制及索引优化实战
数据库·经验分享·mysql·性能优化·dba
AI人工智能+电脑小能手30 分钟前
【大白话说Java面试题 第93题】【Mysql篇】第23题:从查找速度来看,聚集索引和非聚集索引哪个更快?
java·开发语言·数据库·mysql·面试
WPF工业上位机1 小时前
YXGK.FakeVM数据库示例
jvm·数据库·oracle
牛奔1 小时前
如何让 GORM 打印 SQL 语句?三种方式全解析
数据库·sql
XWalnut1 小时前
Redis从入门到精通
数据库·redis·缓存
LZZ and MYY1 小时前
RTS 在windows和Linux之间ShareMem
linux·运维·服务器
爱学习的徐徐1 小时前
Linux 基础IO
linux·服务器
andafaAPS1 小时前
安达发|工艺品aps自动排产排程排单软件:告别生产“一团乱麻“
大数据·数据库·人工智能·安达发aps·计划排产软件·自动排单软件
蛋蛋的学习记录2 小时前
C#窗体应用中使用EasyModbusCore通讯
服务器·c#·tcp
zt1985q2 小时前
本地部署源代码管理解决方案 Bitbucket Data Center 并实现外部访问
运维·服务器·数据库·网络协议·postgresql·源代码管理