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

24、线程编程:事件驱动、并发、竞争与同步

线程编程:事件驱动、并发、竞争与同步

1. 事件驱动线程

在现代编程中,事件驱动模式是对每个连接一个线程模式的一种改进。以 Web 服务器为例,现代硬件在计算能力上能够同时处理大量请求。但在每个连接一个线程的模式下,这意味着会创建大量线程。线程存在固定开销,特别是需要内核和用户空间栈。这些固定开销限制了给定进程中线程的可扩展性,在 32 位系统上尤为明显(虽然在 64 位系统上,对每个连接一个线程模式的反对理由没那么强烈,但事件驱动模式仍被认为是更好的选择)。系统可能有足够的计算资源来处理数千个并发连接,但在运行这么多并发线程时会遇到可扩展性瓶颈。

系统设计师发现,大多数线程大部分时间都在等待,比如读取文件、等待数据库返回结果、发起远程过程调用等。实际上,使用比系统处理器数量更多的线程并不能提高并行性,这种多线程的使用更多是一种编程抽象,而这种编程便利性可以通过更正式的控制流模型来实现。

基于这些观察,事件驱动线程应运而生。由于每个连接一个线程的工作负载中有很多时间是在等待,我们可以将等待操作与线程解耦。具体做法是异步发出所有 I/O 请求(异步 I/O),并使用多路复用 I/O 来管理服务器中的控制流。在这个模型中,请求处理被转换为一系列异步 I/O 请求和相关的回调函数。这些回调函数可以通过多路复用 I/O 进行等待,这个过程称为事件循环。当 I/O 请求返回时,事件循环将回调函数交给一个等待的线程。

与每个连接一个线程的模式一样,事件驱动模式不一定需要多线程。实际上,事件循环可以是单线程进程执行完回调函数后的自然流程。只有在需要真正的并行性时才添加线程,并且线程数量不应超过处理器数量。

目前,事件驱动模式是设计多线程服务器的首选方法。

http://www.cnnetsun.cn/news/114265.html

相关文章:

  • 33、Linux 内存管理全解析
  • 5.回溯算法
  • 嵌入式模组温控策略
  • 【昇腾CANN训练营·架构篇】打破内存墙:Ascend C 算子融合(Operator Fusion)的极致心法
  • 【昇腾CANN训练营·算法篇】寻找消失的除法器:Newton Iteration 与高精度数学计算的艺术
  • 19、Linux 帧缓冲接口设计与图形库应用
  • 人才发展ℓℓ 人才盘点怎么做?这篇完全应用手册给出答案
  • 真相来了|字节跳动的人才真相:真正拉开差距的,是“人才密度”(附人才密度清单)
  • 力扣(LeetCode) 66: 加一 - 解法思路
  • HC32L130精准延时实现指南
  • 收藏必看!大学生网络安全学习5大方向,校招不踩坑,小白也能逆袭!
  • 收藏!从“黑客梦“到网络安全专家:过来人告诉你自学路线图
  • Bagisto 产品更新后,前台默认语言的内容不更信,其他语言正常。
  • 【收藏】运维转网安的黄金路径:4个高适配岗位+3步落地指南,薪资提升50%
  • 大语言模型全解析:一篇文章带你深入理解AI的强大能力!
  • 【网络】网络通信模型
  • Slimjet浏览器:基于Chromium的高效网页浏览解决方案,内置广告拦截与多功能工具
  • AMP页面还要做吗?2025替代方案及优化指南
  • 为什么你的RAG总是“一本正经地胡说八道”?EAG-RAG揭示真相,准确率暴涨300%的秘密!
  • iOS 项目中证书管理常见的协作问题
  • 理解线程不安全:从观察到原因分析
  • 《Java Web开发入门很简单》——学习笔记,新手入门,收藏这篇就够了
  • 2025年,国内外最火的10款降AI率工具亲测!(持续更新)
  • 基于大数据的餐饮食材管理系统的设计与实现开题报告
  • 基于大数据的交通信号智能控制系统的设计与实现开题报告
  • 基于大数据的交通信号智能控制系统的设计与实现任务书
  • 蜘蛛池站点优化思路分享
  • 2025 OA 选型关键看这 4 点:集成、灵活、安全、易用,附高性价比系统清单
  • 图神经网络与pytorch
  • Xiaomi 商城页面布局(部分)