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

并发服务器的实现

单循环服务器:服务器同一时刻只能响应一个客户端的请求

并发服务器:服务器同一时刻可以响应多个客户的请求

TCP并发服务器:

1.多进程: 资源消耗大,同资源平台下,并发量小。

2.多线程:创建线程资源消耗小,但是比较耗时。

3.线程池:提前预创建大量线程,避免任务执行过程中创建线程的耗时

4.IO多路复用()select.poll.epoll(类似于生产者和消费者模式)

     在不创建新的进程和线程的前提下,可以在一个进程中同时监测多个IO(fd/sockfd/connfd)

优点:节省资源
不足:不利于处理比较耗时,延时比较长的任务

创建步骤:1. 创建文件描述符集合
                  2. 将关注的文件描述符加入到集合
                  3. 等待IO事件到达
                  4. 根据不同的IO事件处理不同的任务

(1)select

int select(int nfds, fd_set *readfds, fd_set *writefds,
                  fd_set *exceptfds, struct timeval *timeout);
       功能:阻塞等待IO事件,返回事件结果
       参数:
                     nfds:关注的最大文件描述符+1
                     readfds:文件描述符读事件集合表
                     writefds:写事件集合表
                     exceptfds:其他事件集合表
                     timeout:超时时间
                                    NULL:不设置超时
       返回值:
              成功:返回到达的事件个数
              失败:-1
              0:超时事件到达但没有IO事件


       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);

特点:1. select使用位图管理文件描述符,最多允许同时监测1024个文件描述符(有上限);
           2. 文件描述符集合在应用层创建,需要实现应用层和内核层的反复拷贝
           3. 需要应用层对集合表进行遍历,寻找到达的事件
           4. 只能工作在水平触发模式(低速模式),不能工作在边沿触发模式(高速模式) 

                                               select在应用层和内核层的拷贝以及返回操作

                                                IO多路复用的流程图


http://www.kler.cn/a/580527.html

相关文章:

  • 虚幻C++插件胚胎级入门 | Slate Widget开发
  • 【09】单片机编程核心技巧:变量赋值,从定义到存储的底层逻辑
  • 机器学习(李宏毅)——Auto-Encoder
  • 基于SpringBoot+Vue的瑜伽课体验课预约系统【附源码】
  • git大文件传输报错
  • pdf修改内容:分享5款好用的工具
  • STM32的Systick定时器的作用
  • 解决电脑问题(7)——软件问题
  • Django 模型的逆向工程
  • Django 初始化导入数据详解
  • 【学习方法二】
  • 手写识别革命:Manus AI如何攻克多语言混合识别难题(一)
  • 【Linux】36.简单的TCP网络程序
  • Qt无法抓取鼠标键盘事件
  • 用android studio模拟器,模拟安卓手机访问网页,使用Chrome 开发者工具查看控制台信息
  • Jeinkins配置sonarqube
  • WebSocket(WS)协议系列(四)SSL/TLS协议
  • uni-app开发的App和H5嵌套封装的App,以及原生App有什么区别
  • LeetCode 热题 100_每日温度(72_739_中等_C++)(栈)(暴力破解;栈(从左到右);栈(从右到左))
  • LeetCode 2070.每一个查询的最大美丽值:排序 + 二分查找