并发服务器---IO多路复用

单循环服务器:同一时刻只能处理一个客户端任务

并发服务器: 同一时刻,只能处理多个客户端的任务

实现方法:多进程 多线程 IO多路复用

IO多路复用:

1.阻塞io(fgets scanf recv getchar read)

想要两个io具有同步的方式 | CPU占有率低

2.非阻塞io

使用轮询的方式实现 | cpu占有率高

实现方式:

1.获取原文件描述符的属性fcntl()

2.为文件描述符添加非阻塞属性

3.设置文件描述符属性

fcntl()

常用

F_GETFL 获取 F_SETFL 设置

3.信号驱动io

异步通知的io方式,节省cpu | 只能监测少量io,以轮询的方式可监测多量io

实现方式:

1)为IO设备增加信号驱动属性

O_ASYNC

2)关联SIGIO信号到对应进程

fcntl(fd, F_SETOWN, getpid());

  1. 注册SIGIO处理函数

signal

4.io多路复用(多个io通过一个进程监测)

多进程和多线程的主要区别在于以下几个方面:
  1. 资源管理:

    • 多进程:每个进程有自己的内存空间和资源,进程间通信(IPC)通常复杂且开销较大。
    • 多线程:线程共享同一进程的内存空间和资源,线程间通信较为简单且高效。
  2. 开销:

    • 多进程:进程创建和销毁的开销较大,因为需要分配和管理独立的内存空间。
    • 多线程:线程创建和销毁的开销较小,因为它们共享进程的内存和资源。
  3. 独立性:

    • 多进程:进程间相对独立,一个进程的崩溃不会直接影响到其他进程。
    • 多线程:线程之间较为紧密,一个线程的崩溃可能会影响整个进程中的其他线程。
  4. 使用场景:

    • 多进程:适用于需要强隔离和独立运行的任务,如服务器处理多个客户端请求。
    • 多线程:适用于需要共享数据和资源的任务,如计算密集型的应用和需要快速响应的应用。
相关推荐
Lsetea7 小时前
curl指定CA目录仍报证书不受信任:--capath与OpenSSL rehash排查
运维·https·ssl·openssl·curl
优化Henry8 小时前
LTE 载波频率与频点配置详解
运维·网络·学习·5g·信息与通信
代码方舟8 小时前
数据科学风控实战:基于天远全能消金报告构建自动化信用评估网关
运维·人工智能·自动化
科力锐品牌君9 小时前
应用级灾备 | 海量非结构化数据如何实现高效数据保护
linux·运维·网络·安全·系统安全·数据安全·灾备
KaiwuDB9 小时前
KaiwuDB 运维实战04:DRBD + KaiwuDB——物联网场景下的低成本数据库高可用方案
运维·数据库·物联网·时序数据库·kaiwudb·aiot·多模数据库
福建佰胜张工9 小时前
A5E00839230西门子工业核心配件详解:参数、安装调试与故障运维全攻略
运维·网络·安全·自动化
Lancker9 小时前
chnroute-linux — 中国大陆 IP 段每日自动更新 + 「仅允许国内访问」落地
linux·运维·tcp/ip
辻弋20110 小时前
【无标题】
大数据·服务器·前端·搜索引擎·开源软件
天远Date Lab10 小时前
零信任架构实战:基于天远全能消金报告(标准版)构建自动化骑手资信评估网关
运维·人工智能·架构·自动化
赛博守夜人10 小时前
反舞弊系列之二十一:数据驱动型反舞弊体系搭建,如何利用ERP与财务数据构建“异常交易自动化风控看板”?
运维·自动化