领导者-追随者 模式

Linux服务器--两种高效的并发模式(半同步/半异步模式、领导者/追随者模式) 并发模式是指I/O处理单元和多个逻辑单元之间协调完成任务的方法1、半同步/半异步模式1.1半同步/半异步模式【1】同步:程序完全按照代码顺序执行;异步:程序的执行需要由系统事件来驱动。常见的系统事件包括中断,信号等。【2】同步线程:按照同步方式运行的线程;异步线程:按照异步方式运行的线程。 异步线程执行效率高,实时性强,但是程序相对负责,难以调试和扩展,不适合于大量的并发。 同步线程效率相 阅读详情

领导者/追随者(Leader/Follower)

1.问题

  多线程是实现并发处理多事件的应用程序的一种常用技术。然而,很难实
  现高性能的多线程服务器应用程序。这些应用程序通常处理大量同时到达
  的多类型事件。为了有效地处理这种问题,有三个强制条件必须解决:

  1)服务请求可以来自为每个已连接的客户机分配的多事件源(如多
  TCP/IP套接字句柄)。因此,一个关键设计强制条件是在线程和事件源间
  确定有效的多路分解关联。

  2)为了将性能最大化,必须尽量减少引起与并发有关的开销。(如语境切
  换,同步化和缓存一致性管理)。特别地,为在多个线程间传递的请求动
  态分配内存的同步模型会在传统的多处理器操作系统中产生巨大的开销。

  3)多路分解共享的事件源集合上事件的多个线程必须相互协作,以防止竞
  争条件。竞争条件可能出现在多个线程试图同时访问或修改某些类型的事
  件源的时刻。

2.解决方案

  构造一个线程池,通过对到达事件源的事件多路分解,并向处理事件的应
  用服务同步地分配事件,依此轮流进行来共享事件源集合。

  详细细节:设计一个线程池机制,允许其中的多个线程相互协作并在检
  测、多路分解、分配和处理事件时保护临界区。在这种机制中,每次允许
  (追随者)排队等待它们成为领导者的机会。当前的领导者线程从事件源
  集合检测到一个事件后,它首先将一个追随者线程提升为新的领导者,然
  后扮演处理线程的角色,对事件多路分解并分配给指定的事件处理程序,
  在处理线程中实现与应用有关的事件处理。在当前领导者线程在由所有线
  程共享的事件源集合上等待新的事件时,多个处理线程可以并发地处理事
  件。在处理完事件后,处理线程恢复到追随者角色,并等待再次成为领导
  者线程。

3.结构

  由操作系统提供句柄,用来区分可以生成事件并将之排队的事件源(如网
  络连接或打开文件)。事件可以由外部事件源(如从客户机发送一个服务
  的CONNECT事件或READ事件),或者内部事件源(如超时)引发。句柄
  集是句柄的集合,可以用来等待一个或多个事件在该句柄集中的句柄上发
  表。当可以激活句柄集中句柄上的一个操作而不发生操作阻塞时,句柄集
  返回到它的调用者。

这里写图片描述

  事件处理程序明确了由一个或多个钩子方法组成的接口。这些方法表示可
  以对发生在句柄上的与应用有关的事件进行处理的操作集。

  具体事件处理程序是事件处理程序的特化,并实现应用程序提供的特定服
  务。特别地,具体事件处理程序实现负责处理从句柄接收的事件的钩子方
  法。

这里写图片描述

  领导者/追随者模式的核心是线程池。一个或多个线程扮演追随者角色并在
  线程池同步器上排队等待扮演领导者角色。其中一个线程被选择成为领导
  者,等待事件在句柄集中的句柄上发生。当有一个事件发生时,当前领导
  者线程将一个追随者线程提升为新的领导者。原来的领导者接着扮演处理
  线程的角色,对从句柄集到相应事件处理程序的事件进行多路分解,并分
  配处理程序的钩子方法进行事件处理。在处理线程完成了事件的处理后,
  它再次返回扮演追随者线程的角色,在线程池同步器上等待再次成为领导者线程。

这里写图片描述

4.实现

1)选择句柄和句柄集机制。句柄集是句柄的集合,领导者线程可以用它
来等待在事件源集上发生事件。开发者通常选择底层操作系统提供的句柄
和句柄集机制,而不是随便地实现它们。

1.1)确定句柄类型。

·并发句柄。这种类型的句柄允许多个线程并发访问事件源的句柄而不会引发
可能破坏,丢失或扰乱数据的竞争条件。

·迭代句柄。这种类型的句柄需要多线程迭代访问事件源上的句柄,因为并发
访问将导致竞争条件。 

1.2)确定句柄集的类型。

·并发句柄集。这种类型的句柄集上可以有并发的动作,例如,线程池对它的
并发访问。

·迭代句柄集。这种类型的句柄集在它可以启动句柄集中一个或多个句柄上的
一个操作而不阻塞操作时返回到它的调用者。虽然迭代句柄集可以在单个调用
中返回多个句柄,但是它一次只能由一个线程调用。

1.3)确定选择某个句柄和句柄集机制的效果。

1.4)实现事件处理程序的多路分解机制。

·对低层操作系统事件多路分解机制编程。在这种策略中,直接使用操作系统
提供的句柄集多路分解机制。

·对高层事件多路分解模式编程。在这种策略中,开发者使用诸如反应器、主
动器和包装器材外观等高层模式。

2)在句柄集中实现临时激活(停用)句柄的协议。当事件到达时,领导者线程执行以下三步:

·在句柄集中暂时停用该句柄。

·将一个追随者线程提升为新的领导者。

·继续处理事件。

在句柄集中将该句柄停用避免了从选择新领导者到处理事件的时间内出现竞争
条件。如果新的领导者在这一段时间内等待句柄集中的同一句柄,那么它可能
再次将该事件多路分解,这样做是错误的,因为这时已经在进行分配了。在事
件被处理后,句柄在句柄集中被再次激活,这样领导者线程等待事件在该句柄
或句柄集中其他激活的句柄上出现。

3)实现线程池。为了将一个追随者线程提升为领导者角色,以及确定哪
个线程是当前的领导者,领导者/追随者模式的工具必须管理一个线程池。一种直接的实现方法是简单地将所有追随者线程放入集合,等待单独的同步器,如信号灯和条件变量。在这种设计中,不管是哪个线程来处理事件,只要共享句柄集的池中的所有线程都是串行化的。

4)实现允许线程初次加入(以及以后再次加入)线程池的协议。该协议用于以下两种情况:

·在首创了能获得和处理事件的线程池后。

·以及在处理线程已完成并且可以处理另一个事件时。

如果没有领导者线程可用,则处理线程可以立即变为领导者。如果领导者线程
已经获得,一个处理线程可以在线程池同步器上等待变成追随者。

5)实现追随者提升协议。

5.1)实现句柄集同步协议。如果句柄集是迭代的,并且我们盲目地提升了一个新的领导者线程,那么可能新的领导者线程会试图处理与前一个领导者线程检测到的并正在进行处理的同一事件。为了避免这种竞争条件,必须在将一个追随者句柄提升为领导者句柄并将事件分配给具体事件处理程序之前,将该句柄从句柄集的候选句柄中删除。分配并处理事件后,必须从句柄集中再次激活该句柄。

5.2)确定提升协议排序。

·LIFO顺序。在许多应用程序中,下一次提升哪个追随者线程不重要,因为
所有线程都是对等的。在这种情况下,领导者线程可以按照后进先出
(LIFO)的顺序提升追随者线程。LIFO协议通过确保等待时间最短的线程首
先被提升将CPU高速缓存的相似性最大化。

·优先级顺序。在某些应用程序中,特别是实时应用程序中,线程可能运行在
不同的优先级上。在这种情况下,需要根据追随者线程的优先级对它们进行提
升。这种协议可以使用某些类型的优先级队列实现,如堆。虽然该协议比
LIFO协议更复杂,但是为了使优先级反序的情况最少,就需要按照追随者线
程的优先级对它们进行提升。

·由实现定义的顺序。在使用操作系统同步器(如信号灯或条件变量)来实现
句柄集时常用这种顺序,通常按照由实现定义的顺序分配等待线程。这种协议
的优点是它能高效地映射到本地操作系统同步器上。

6)实现事件处理程序。

5.结论

优点:

1)性能增加。

·增强了CPU高速缓存相似性并消除了动态内存分配和线程间共享的数据
缓冲区要求。

·通过在线程间不交换数据的方法来使加锁开销达到最小,因此降低了线
程同步化。

·可能将优先级逆序的数量减少到最小,因为服务器中没有进行其他排
队。

·不需要语境切换以处理每个事件,减少了事件分配延时。

2)编程简单性。领导者/追随者模式简化了并发模型的编程,其中多线程
可以使用共享句柄集接收请求,处理响应并多路分解连接。

不足:

1)实现复杂性。

2)缺乏灵活性。

3)网络I/O瓶颈。

多智能体系统的分布式协同控制——采样控制、脉冲控制、弹性控制 高效的分布式控制协可分为时间触发机制和事件触发机制两种。时间触发机制包括 分布式采样控制和 分布式脉冲控制;事件触发机制包括 分布式事件触发控制;此外还有恶意攻击下的弹性控制。 阅读详情

相关推荐

两种高效的并发模式:半同步/半异步模式、领导者/追随者模式

半同步/半异步模式、半同步/半反应堆模式、相对高效的半同步/半异步模式、领导者/追随者模式

ZY-JIMMY 2201

高效并发模式之领导者/追随者模式

一、基本概念 领导者/追随者模式是多个工作线程轮流获得事件源集合,轮流监听、分发并处理事件的一种模式。在任何时间点,只要一个领导者线程,他负责监听I/O事件。而其他线程则都是追随者,他们休眠在线程池中等待称为新的领导者。当前领导者如果检测到I/O事件,首先从线程池中推选出新的领导者线程,处理I/O事件。此时新的领导者等待新的I/O事件,而就得领导者则处理I/O事件,从而实现了并发。 二、组成部...

柴犬小丸子的博客 895

[数据转换]将NetCDF(NC)文件转换成单个GeoTIFF文件

有时候要提取tif格式数据中的气象数据,但从气象网站上下载的却是NC格式的文件。这就需要我们将NC格式的文件转换成TIF格式的文件。

G_sea_young的博客 1004

leader-follower model

领导者-跟随者模型如下: 有若干个线程(一般组成线程池)用来处理大量的事件有一个线程作为领导者,等待事件的发生;其他的线程作为追随者,仅仅是睡眠。假如有事件需要处理,领导者会从追随者中指定一个新的领导者,自己去处理事件。唤醒的追随者作为新的领导者等待事件的发生。处理事件的线程处理完毕以后,就会成为追随者的一员,直到被唤醒成为领导者。假如需要处理的事件太多,而线程数量不够(能够动态创建线程处理

onlyou2030的博客 1081

AUTOSAR实战:手把手教你配置EthTsync模块,搞定车载以太网时间同步

本文详细解析AUTOSAR架构中EthTsync模块的配置方法,实现车载以太网时间同步。通过对比gPTP与PTP协议差异,提供从开发环境准备到参数配置、模块集成的全流程指南,并分享性能优化与调试技巧,帮助开发者实现微秒级同步精度,满足自动驾驶等高精度时间同步需求。

weixin_28736335的博客 372

在 SAP ECC 中定义 ledger 时遇到 “Define exactly one leading ledger“(消息号 FAGL_LEDGER_CUST012)的错误

摘要:SAP系统要求必须且只能定义一个主导分类账(Leading Ledger)。当出现错误消息FAGL_LEDGER_CUST012时,需通过事务码FINSC_LEDGER或SPRO路径检查分类账配置,确保仅有一个分类账被标记为"LeadingLedger",其余设为"Non-leadingLedger"。主导分类账是SAP默认用于标准报表的核心分类账,修改配置需谨慎以免影响已有数据。若问题未解决,建议检查未完成配置或查阅SAP Notes获取解决方案。

金牌架构师 802

领导者-追随者模式

转自http://blog.youkuaiyun.com/lmh12506/article/details/8243044领导者-追随者模型介绍这几天翻了些文章,发现对领导者/追随者模型说的比较少,下面就这个模型打个比方:1.话说一个地方有一群有组织无纪律的人从事山贼这个很有前途的职业。2.一般就是有一个山贼在山路口察看,其他人在林子里面睡觉。3.假如发现有落单的过往客商,望风的山贼就会弄醒一个睡觉的山贼,然后

github_33736971的博客 2181

LSTM+Transformer混合模型时间序列预测实战教学

LSTM+Transformer混合模型时间序列预测实战教学 毕业设计

8218

【Java设计模式】领导者 - 追随者模式

领导者 - 追随者模式的目的是有效地管理一组工作线程,使多个线程能够轮流共享一组事件源,与每个源使用一个线程的方法相比,优化了资源利用率并提高了性能。

道长的博客 1118

基于libVLC的视频播放器之四:直接使用libVLC

一.效果 播放本地文件 播放网络url:rtsp://3.84.6.190/vod/mp4:BigBuckBunny_115k.mov 二.实现 既然有VLC-Qt,为什么还要直接调用libVLC呢,因为直接调用会加深对整个播放流程的理解,方便后面修改VLC-Qt源码。 注意事项: 1.编译报错:error C2065: “libvlc_media_read_cb”: 未声明的标识符。修改如下: 2.libvlc_new(0, nullptr)返回null 将plugins

草上爬的博客 5048

华为OD新系统机试真题 - API请求日志去重分析

华为OD新系统机试真题【API请求日志去重分析】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD4月15号机试真题【API请求日志去重分析】

qq_45776114的博客 914

两种并发模式:半同步半异步 领导者追随者

介绍 半同步半异步 介绍 变体 半同步半反应堆 高效的半同步半反应堆领导者追随者 介绍 实现 组成 过程 优缺点 介绍 并发模式是指IO处理单元和多个逻辑单元之间协调完成任务的方法 主要有半同步半异步领导者追随者两种模式。 半同步半异步 介绍 同步线程是指线程程序完全按照代码序列...

vjhghjghj的博客 650

基于STM32的太阳能充电宝设计_资料编号31

系统硬件包括主控 STM32F103C8T6、0.96 OLED 显示屏、蜂鸣器、电源自锁开关、温度传感器 DS18B20、继电器、5 V DC 升压模块 、TB4056、18650锂电池、9 V太阳能板、稳压降压 5 V三极管。电源供应:锂电池为系统供电,9 伏太阳能板经 5 伏降压稳压三极管降压为 5 伏后传送到 TP4056,TP4056 为锂电池供电,因锂电池电压 3.7 伏,通过 5 伏 DC 升压模块升压到 5 伏为整个系统提供 5 伏电压。

嵌入式阿齐Archie 1万+

两种高效的并发模式——半同步/半异步、领导者/追随者模式

一、并发模式中的同步和异步的区别 1、同步:程序完全按照代码顺序执行(简单理解就是,我调用一个功能该功能没有结束前,我就一直死等结果) 2、异步:程序的执行需要由系统事件来驱动,常见的系统事件包括中断、信号等(简单理解为:调用一个功能,不需要指代该功能最后执行的结果,该功能有结果后再通知我就行(回调通知)。也可以理解为:数据拷贝的时候,进程是否阻塞来作为同步和异步的区别)。常见的系统事件包括中...

Y~哈哈哈的博客 575

免ROOT、不刷机、不依赖Xposed实现Android改机的思路

最近在一个项目中需要模拟多种Android设备的环境。无奈市面上的大部分改机工具,要么需要ROOT权限,要么依赖Xposed,甚至还得重启设备。为了实现更灵活、更干净的改机方式,我开始了漫长的技术探索,最终找到了免ROOT、不刷机、拒绝Xposed的实现路径。Android_IDIMEI手机序列号手机型号、品牌、CPU型号等硬件信息GPS位置、Wi-Fi参数、通话记录、短信等软硬件数据这些信息通常用于标识设备唯一性,而改机就是对这些标识数据进行模拟或篡改。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2664

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

领导者追随者模式

适用条件: 多线程处理任务 过程: 有一个线程作为领导者,等待事件的发生;其他的线程作为追随者,仅仅是睡眠。 假如有事件需要处理,领导者会从追随者中指定一个新的领导者,自己去处理事件。 唤醒的追随者作为新的领导者等待事件的发生。 处理事件的线程处理完毕以后,就会成为追随者的一员,直到被唤醒成为领导者。 假如需要处理的事件太多,而线程数量不够(能够动态创建线程处理另当别论),则有的

lq123的博客 1958

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

半同步/半异步模式和领导者/追随者模式

半同步半异步模式:出现原因: 异步线程执行效率高,但是编写复杂,同步线程效率低,但是逻辑简单。服务器要求好的实时性和同时处理多用户的请求,英雌采用两者结合的形式。 具体情况: 过程: 异步线程见听到客户请求后,将其封装成请求对象插入请求队列,请求队列将通过通知某个工作在同步模式下的工作线程来读取并处理该请求对象。具体选择哪一个工作线程来服务这个客户请求,取决于请求队列的设计。变体:半同步半反

zhuziyu1157817544 2224

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【Linux高性能服务器编程】两种高性能并发模式剖析——领导者/追随者模式

领导者/追随者模式是多个工作线程轮流获得事件源集合,轮流监听、分发并处理事件的一种模式。在任意时间点,程序都仅有一个领导者线程,它负责监听I/O事件。而其他线程则都是追随者,它们休眠在线程池中等待成为新的领导者。当前的领导者如果检测到IIO事件,首先要从线程池中推选出新的领导者线程,然后处理I/O事件。此时,新的领导者等待新的I/O事件,而原来的领导者则处理I/O 事件,二者实现了并发。

weixin_73951752的博客 1568

Linux网络编程 | 并发模式:半同步/半异步模式、领导者/追随者模式

文章目录同步与异步半同步/半异步模式变体:半同步/半反应堆模式改进:更高效的半同步/半异步模式领导者/追随者模式组件 :句柄集、线程集、事件处理器 并发模式是指I/O处理单元和多个逻辑单元之间协调完成任务的方法。服务器主要有两种并发编程模式:半同步/半异步模式(half-sync/half-async)模式和领导者/追随者(Leader/Followers)模式 同步与异步 首先在这里要指出,这里的"同步"和“异步”与I/O模型中的”同步I/O“与“异步I/O”是两个完全不同的概念,不能将其混淆。 在I

凌桓丶的博客 1738

高并发模式———领导者/追随者模式和半同步/半异步模式

高并发模式  高并发模式的意义:对于IO密集型的操作,因为IO操作速度远远小于CPU的计算速度,所以,如果程序阻塞于IO操作将大量浪费CPU。但是如果多线程的情况下,被IO阻塞的线程可以放弃CPU(或操作系统调度),将执行权限转移给其他线程。高效率的使用CPU。 半同步/半异步模式   这里的同步模式是指程序按照代码序列的顺序执行,异步是指程序执行需要由系统事件来驱动 ...

qq_41885826的博客 416

两种高效的并发模式(半同步/半异步模式 领导者/追随者模式)

半同步/半异步模式: 首先要区别于I/O模型中的同步异步: I/O模型中: 同步和异步是指内核向应用程序通知的是何种I/O事件(就绪事件/完成事件),以及该由谁来完成I/O读写(应用程序/内核);I/O模型中的同步和异步是用来形容I/O事件的完成。 半同步与半异步模式中: 同步主要是指程序完全按照代码序列的顺序执行;异步是指程序的执行需要由系统事件来驱动(常见的系统事件:中断,信号...

qq_41899255的博客 807

Linux服务器编程实践104-领导者/追随者模式:线程轮流监听与处理事件的机制

本文介绍了Linux服务器编程中的领导者/追随者并发模式,该模式通过线程轮流担任"领导者"角色监听I/O事件,其余线程作为"追随者"等待处理任务,有效降低了线程同步开销和数据传递成本。文章详细剖析了该模式的四大核心组件(句柄集、线程集、事件处理器等)及其协作机制,提供了基于Linux系统调用(pthread、epoll)的完整实现示例,包括TCP连接处理等具体应用场景。与半同步/半异步模式相比,该模式更适合I/O密集型、低延迟要求的服务场景,但需注意其单一事件源限制和

文石_2009的博客 1033

Linux服务器编程实践105 - 领导者/追随者模式的组件:句柄集、线程集与事件处理器

本文深入解析了高并发服务器中的领导者/追随者模式,重点介绍了三大核心组件(句柄集、线程集、事件处理器)的设计与实现。该模式通过轮换领导者角色监听I/O事件,避免了线程间数据传递和锁竞争,特别适合高并发I/O场景。文章详细阐述了各组件功能、接口设计及实现要点,包括基于epoll的句柄集管理、线程状态切换机制和事件处理器的模板方法模式。同时提供了完整工作流程说明、典型应用场景和性能优化建议,并与其他并发模式进行对比,指出其在I/O密集型服务中的优势。最后总结了该模式的关键实现要点,为构建高性能Linux服务器提

文石_2009的博客 899

两种高效的并发编程方式-半同步/半异步(half-sync/half-rsync)模式和领导者/追随者(Leader/Followers)模式

上节我们对于两种事件处理模式做了简要的分析,在这里我们对于两种高效的并发编程方式来进行简单讨论,后序会继续完善 半同步/半异步方式 对于并发编程中的“同步"和"异步"是与I/O模型中的"同步"和"异步"是两种不同的概念 并发模式中,"同步"指的是程序完全按照代码序列的形式来执行的 -"异步"执行需要由系统事件来进行驱动 然而两种方法各有优缺点,异步线程虽然执行效率高,实施性很强,但是相对复杂.

dream0130__的博客 569
上一篇: 领导者-追随者模式
下一篇: reactor 和 proactor 模式的异同点
lm_123_456
博客等级 码龄11年 35粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值