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

应用层网络编程范式

前言

        在不考虑内核层的情况下,选用Linux底层支持的posix API和网络协议栈。对于应用层网络编程方案总结如下。其中主要针对两个角度:IO模型、编程模型。其中IO模型可参考Linux下IO模型,一般分为五种:阻塞IO、非阻塞IO、信号驱动IO、IO多路复用、异步IO。编程模型分为两种:同步编程、异步编程。其中对于IO模型不再赘述,对于编程模型而言,同步编程更好理解,开发效率更高。异步编程实现方式一般两种:线程池、回调函数。优点是为了提高效率,缺点也很明显开发时如果选用线程池则会带来开销,而回调函数在开发时难理解,且开发难度大,容易陷入“回调地狱”。针对上述两个角度介绍以下内容:

一、常用范式

  • 线程池 + 阻塞 I/O(BIO)

  • Reactor + epoll(同步非阻塞IO + 回调)

  • 原生io_uring + 回调

  • 协程(封装底层同步非阻塞I/O或异步I/O)

二、介绍

1. 线程池 + 阻塞 I/O (BIO)

  • I/O 模型:同步阻塞 I/O

  • 编程模型:同步(每个线程顺序执行阻塞操作)

  • 工作机制

    • 主线程 accept 连接,分发给 Worker 线程池。

    • 每个 Worker 线程阻塞read/write 上,处理单一连接。

  • 适用场景:低并发、CPU 密集型任务,或兼容性要求高的简单服务。

  • 性能瓶颈:线程数 ≈ 并发连接数,上下文切换开销大,无法应对高并发。

2. Reactor + epoll(同步非阻塞 I/O + 回调)

  • I/O 模型:同步非阻塞 I/O

  • 编程模型:异步(事件驱动 + 回调函数或状态机)

  • 工作机制

    • 单线程(或少量线程)运行事件循环,调用 epoll_wait 监听 I/O 就绪事件。

    • 事件就绪后,触发注册的回调函数处理数据(需主动调用非阻塞的 read/write)。

  • 优势:高并发支持(单线程处理万级连接)。

  • 缺点:回调地狱(Callback Hell),逻辑碎片化。

  • 代表:Netty (Java)、libevent (C)、Tornado (Python)

3. 原生 io_uring 的异步 I/O

  • I/O 模型:异步 I/O (AIO)

  • 编程模型:异步(回调或 Future/Promise)

  • 工作机制

    • 提交 I/O 请求(如 read/write)到内核队列(SQ),立即返回

    • 内核完成操作后,将结果放入完成队列(CQ),应用异步收割结果。

    • 无需应用再次发起数据拷贝调用(区别于 epoll)。

  • 优势:零拷贝、批处理、更低延迟(避免二次系统调用)。

  • 代表:Tokio(Rust, 可选后端)、liburing (C)

4. 协程(封装底层同步非阻塞I/O或异步I/O)

  • I/O 模型

    • 底层为 epoll同步非阻塞 I/O

    • 底层为 io_uring异步 I/O

  • 编程模型同步风格写异步代码

  • 工作机制

    • 协程在 I/O 等待时挂起(Yield),由调度器切换到其他就绪协程。

    • 底层仍依赖事件循环(epollio_uring)。

  • 优势:开发体验极佳(无回调地狱)、天然支持多核调度。

  • 代表

    • epoll 后端:Goroutine (Go)、asyncio (Python)

    • io_uring 后端:Tokio (Rust)、Glommio (Rust)

更多资料:0voice · GitHub

http://www.lryc.cn/news/577097.html

相关文章:

  • 基于Java+Springboot的宠物健康咨询系统
  • 数据分析标普500
  • Linux下基于C++11的socket网络编程(基础)个人总结版
  • 数据库 DML 语句详解:语法与注意事项
  • 训练营总结
  • C++高效结合主流工具:现代系统底层动力
  • 浅谈AI大模型-MCP
  • 基于SSM + JSP 的宿舍管理系统
  • JVM基础--JVM的组成
  • AlpineLinux安装部署elasticsearch
  • STM32——HAL库总结
  • 详解快速排序
  • http相关网络问题面试怎么答
  • 矩阵的逆 线性代数
  • Vue中keep-alive结合router实现部分页面缓存
  • 【NLP 实战】蒙古语情感分析:从 CNN 架构设计到模型训练的全流程解析(内附项目源码及模型成果)
  • 【Flask开发】嘿马文学web完整flask项目第2篇:2.用户认证,Json Web Token(JWT)【附代码文档】
  • Nginx漏洞处理指南
  • python pyecharts 数据分析及可视化(2)
  • Prompt工程标准化在多模型协同中的作用
  • swift-19-从OC到Swift、函数式编程
  • 设计模式 | 过滤器模式
  • MySQL之全场景常用工具链
  • MyBatis批量删除
  • 【系统分析师】2021年真题:案例分析-答案及详解
  • CppCon 2017 学习:Type Punning in C++17 Avoiding Pun-defined Behavior
  • 【硬核数学】2.4 驯服“梯度下降”:深度学习中的优化艺术与正则化技巧《从零构建机器学习、深度学习到LLM的数学认知》
  • Python爬虫:Requests与Beautiful Soup库详解
  • ISP Pipeline(9):Noise Filter for Chroma 色度去噪
  • node js入门,包含express,npm管理