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

高性能网络模式:Reactor 和 Proactor

 Reactor

Reactor 采用I/O多路复用监听事件,收到事件后,根据事件类型分配给某个进程/线程。

实际应用中用到的模型:

单 Reactor 单进程

单 Reactor 多线程

优点:能充分利用多核CPU性能。

缺点:存在多线程竞争共享资源。(比如子线程处理完业务后,要把结果传递给主线程的Handler进行发送,这里涉及共享资源的竞争)

多 Reactor 多进程 / 线程

单 Reactor 模式存在的问题:一个 Reactor 对象承担所有事件的监听和响应,而且只在主线程运行,在面对瞬间高并发场景时,会出现性能瓶颈。

多 Reactor 多线程:

 

惊群现象 

惊群现象是指在多进程或多线程的并发系统中,当某个资源或事件变得可用时,多个等待的进程或线程会同时被唤醒,导致它们竞争资源或进行相同的操作,从而引发系统的性能下降,甚至出现大量无效的工作。

如何避免惊群现象?

1.使用信号量或条件变量管理线程的唤醒,保证每次只有一个线程被唤醒。

2.将待处理的任务放入队列,唤醒的线程按照一定顺序依次处理任务,从而避免多个线程同时处理相同任务的情况。

3.采用延迟唤醒机制。比如,可以在满足条件时仅唤醒一个线程,或者通过短暂的延时来避免大量线程同时被唤醒。

4.采用负载均衡策略,将多个进程/线程分配到不同的资源池中,确保每个线程不会竞争同一个资源,降低资源冲突的可能性。

Proactor 

Linux 网络编程中的 socket 不支持异步I/O,所以基于 Linux 的高性能网络程序都是使用 Reactor 方案;Windows 网络编程中的 socket 支持异步I/O,能实现效率更高的 Proactor 方案。


http://www.mrgr.cn/news/83203.html

相关文章:

  • 二十三种设计模式-原型模式
  • Elasticsearch:聚合操作
  • 3.8、China_SDH基本复用映射结构
  • HarmonyOS中实现上拉加载下拉刷新
  • C++语言的计算机基础
  • 1、监控系统zabbix
  • Linux标准IOday3
  • yum换源
  • Spring——自动装配
  • 【python基础——异常BUG】
  • redis:安装部署、升级以及失败回退
  • 【算法】八大排序算法
  • UI自动化测试框架playwright--初级入门
  • 音视频入门基础:MPEG2-PS专题(5)——FFmpeg源码中,解析PS流中的PES流的实现
  • K-means算法在无监督学习中的应用
  • 第四、五章图论和网络爬虫+网络搜索
  • python虚拟环境的使用
  • C# 对象和类型(结构)
  • ArrayList和HashMap区别
  • 2025新年源码免费送
  • 【JavaEE进阶】获取Cookie/Session
  • 强化学习入门
  • 【C++】16.stack和queue的使用
  • 【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法,以及自动化实时数据采集
  • UI自动化测试保姆级教程--pytest详解(精简易懂)
  • halcon三维点云数据处理(六)find_box_3d