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
          • 线性扫描:需要遍历所有描述符来检查状态
相关推荐
SadSunset几秒前
第一章:Redis 入门介绍
数据库·redis·缓存
weixin_464307638 分钟前
QT智能指针
java·数据库·qt
王仲肖38 分钟前
PostgreSQL VACUUM 与 AUTOVACUUM 深度解析
数据库·postgresql
电商API&Tina41 分钟前
电商数据采集API接口||合规优先、稳定高效、数据精准
java·javascript·数据库·python·json
lifewange1 小时前
SQL 中 IN 和 AND 可以搭配使用么?
数据库·sql
H_老邪2 小时前
Linux 与 Docker 常用命令
linux·运维·服务器·docker
博语小屋2 小时前
I/O 多路转接之epoll
运维·服务器·数据库
进击的雷神2 小时前
突破POST分页与IP封锁:基于表单提交和代理转发的新闻爬虫设计
爬虫·网络协议·tcp/ip
yewq-cn2 小时前
linux 内核设备号
linux·运维·服务器
问道飞鱼2 小时前
【大模型学习】LangGraph 深度解析:定义、功能、原理与实践
数据库·学习·大模型·工作流