当前位置: 首页 > ops >正文

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
          • 线性扫描:需要遍历所有描述符来检查状态
http://www.xdnf.cn/news/18836.html

相关文章:

  • Linux 离线环境下 Anaconda3 与核心机器学习库(scikit-learn/OpenCV/PyTorch)安装配置指南
  • React内网开发代理配置详解
  • 安装了TortoiseSVN但是在idea的subversion里面找不到svn.exe
  • LangChain4J-(3)-模型参数配置
  • 力扣 30 天 JavaScript 挑战 第41天 (第十二题)对异步操作,promise,async/await有了更深理解
  • 部署k8s-efk日志收集服务(小白的“升级打怪”成长之路)
  • 在 Ubuntu 系统上安装 MySQL
  • Spring Cloud 高频面试题详解(含代码示例与深度解析)
  • 浏览器与计算机网络
  • 计算机网络:服务器处理多客户端(并发服务器)
  • 【Redis#8】Redis 数据结构 -- Zset 类型
  • Java 大视界 -- Java 大数据机器学习模型在电商推荐系统冷启动问题解决与推荐效果提升中的应用(403)
  • Containerd 安装与配置指南
  • 基于Spring Boot的民宿服务管理系统-项目分享
  • THM Smol
  • Redis 数据结构
  • Content-Type是application/x-www-form-urlencoded表示从前端到后端提交的是表单的形式
  • vue新能源汽车销售平台的设计与实现(代码+数据库+LW)
  • 数据结构-串
  • 【微信小程序教程】第13节:用户授权与登录流程狼惫
  • ES03-常用API
  • 前端工程化与AI融合:构建智能化开发体系
  • 【git】P1 git 分布式管理系统简介
  • 开源 C++ QT Widget 开发(七)线程--多线程及通讯
  • 使用openCV(C ++ / Python)的Alpha混合
  • 安卓闪黑工具:aosp16版本Winscope之搜索功能剖析
  • GTCB:引领金融革命,打造数字经济时代标杆
  • 微生产力革命:AI解决生活小任务分享会
  • 欧盟《人工智能法案》生效一年主要实施进展概览(一)
  • MyBatis 之关联查询(一对一、一对多及多对多实现)