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

4 篇文章 0 订阅
订阅专栏

半同步/半异步模式:

首先要区别于I/O模型中的同步异步:

I/O模型中:    同步和异步是指内核向应用程序通知的是何种I/O事件(就绪事件/完成事件),以及该由谁来完成I/O读写(应用程序/内核);I/O模型中的同步和异步是用来形容I/O事件的完成。

半同步与半异步模式中:   同步主要是指程序完全按照代码序列的顺序执行;异步是指程序的执行需要由系统事件来驱动(常见的系统事件:中断,信号等)。  半同步半异步中的同步和异步主要指的是程序的执行顺序

并发模式中的同步和异步(以读事件为例):

                                               

  

    同步线程的执行为按照顺序每次只能有一个线程请求资源,直到资源请求成功才能结束这个进程。效率较低,但设计简单。

    异步线程(以信号为例)当一个线程申请资源时,线程将需求传送给信号处理函数,信号处理函数在完成线程的需求后将线程所需的资源返回个线程。

    同步线程的运行虽然效率相对较低,实时性较差,但是逻辑简单。异步线程的执行效率高,实时性强,这是很多嵌入式程序采用的模型,但异步方式执行的线程相对复杂,难于调试和扩展。所以对于服务器这种既要求较好的实时性,有要求能同时处理多个客户请求得应用程序,可以同时使用同步线程和异步线程来实现,即就是半同步/半异步模式来实现。

半同步/半异步模式

   同步线程用于处理客户逻辑(下图的逻辑单元);异步线程用于处理I/O事件(下图的I/O处理单元)。异步线程监听到客户的请求后,就将其封装成请求对象并插入请求队列中。请求队列将通知某个工作在同步模式下的工作线程来读取并处理请求对象。(具体的如何选择工作线程取决于请求队列的设计。)

首先先了解以下服务器基本框架:

                                           

具体的半同步/半异步工作流程如下:

                                 

结合考虑两种事件处理模式和集中I/O模型,半同步/半异步模式就存在多种变体

下面介绍几种较为经典的模式:

半同步/半反应堆模式:

                                    

      异步线程只有一个,由主线程来充当,负责监听所有socket上的事件,如果所监听的socket上有事件发生,即新的连接请求到来,主线程接受得到新的来凝结socket,然后往epoll内核事件表中注册该socket上的读写事件。连接的socket上有读写事件发生,即有新的客户请求到来或有数据要发送到客户端,主线程就将该连接socket插入请求队列中,当有任务到来时,工作线程通过竞争(如申请互斥锁)获得任务的接管权,这种竞争是的只有空闲的工作线程才有机会来处理新任务,这样就可以合理的分配任务。(该模式采用的事件处理模式为Reactor模式)。

 

缺点:

  1. 主线程和工作线程共享请求队列。主线程王请求队列中添加任务,或者工作线程从请求队列中取出任务,都需要请求队列加锁保护,从而耗费CPU时间。
  2. 每个工作线程在同一时间只能处理一个客户请求,客户数量较多,工作线程骄傲少,则请求队列将会堆积很多任务对象,客户端响应速度越来越慢。如果增加线程来解决,工作线程的切换也会耗费大量CPU的时间。

领导者/追随者模式:

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

领导者/追随者模式组件:句柄集,线程集,事件处理器和具体事件处理器。

                                      

句柄集:

     句柄用于表示I/O资源,在Linux下通常就是一个文件描述符。句柄集管理众多句柄,他使用wanit_for_event方法来监听这些句柄上的I/O事件,并将其中的就绪事件通知给领导者线程。领导者则调用绑定到Handle上的事件处理器来处理事件,领导者将Handle和事件处理器绑定是通过调用句柄集中的register_handle方法实现的。

线程集:

      线程集是所有工作线程(包括领导者线程和追随者线程)的管理者。负责各线程之间的同步,以及新领导者线程的推选。线程集中的线程子在任一时间必处于如下三种状态之一:

(1)Leader:线程当前处于领导者身份,负责等待句柄集上的I/O事件。

(2)Processing:线程正在处理事件。领导者检测到I/O事件后,可以转移到Processing状态来处理事件,并调用promote_new_leader方法推选新的领导者;也可以指定其他追随者来处理事件,此时领导者的地位不变。当处于Processing状态的线程处理完事件之后,如果当前线程集中没有领导者,则它将会成为新的领导者,否则它就直接转变为追随者。

Follower:线程当前处于追随者身份,通过调用线程集的join方法等待成为新的领导者,也可能被当前的领导者指定来处理新的任务。

状态转移图:

                                                

     领导者线程推选新的领导者和追随者等到成为新的领导者者两个操作都将修改线程集,因此线程集提供一个成员Synchronizer来同步这两个操作,以避免竞态条件。

 事件处理器和具体时事件处理器:

   事件处理器通常包含一个或多个回调函数handle_event。这些回调函数用于处理事件对应的业务逻辑,事件处理器在使用前需要被绑定到某个句柄上,当该句柄上有事件发生时,领导者就执行与之绑定的时间处理器的回调函数。具体的事件处理器是事件处理器的派生类。它们必须重新实现积累的handle_evevnt方法,以处理特定的任务。

领导者/追随者模式工作流程图:

                             

领导者/追随者模式仅支持一个事件源集合,因此无法让每个工作线程独立的管理多个客户连接。

参考自《Linux高性能服务器编程》

 

 

 

 

两种高效并发模式同步/异步模式领导者/追随者模式
ZY-JIMMY
08-02 1942
同步/异步模式同步/反应堆模式、相对高效同步/异步模式领导者/追随者模式
Linux服务器 | 服务器模型与三个模块、两种并发模式同步/异步领导者/追随者
Jormungand_V的博客
11-21 1179
文章目录C/S模型P2P模型 C/S模型 即常说的 客户端/服务器 模型,将资源(视频、文本、图片、软件等)提供者视作服务器,资源请求者视为客户端。 由于客户端连接请求(connect函数)是随机到达的异步事件,服务器需要使用某种 I/O模型 来监听这一事件。例如 I/O复用技术之一的 select系统调用:当监听到连接请求后,服务器就调用 accept函数 接收它,并分配一个 逻辑单元(新创建的子进程、子线程等) 管理这个新连接。 工作流程如下图所示: 服务器在处理一个客户请求的同时还要继续监听其他客
两种并发模式同步异步 领导者追随者
vjhghjghj的博客
01-13 504
介绍 同步异步 介绍 变体 同步反应堆 高效同步反应堆领导者追随者 介绍 实现 组成 过程 优缺点 介绍 并发模式是指IO处理单元和多个逻辑单元之间协调完成任务的方法 主要有同步异步领导者追随者两种模式同步异步 介绍 同步线程是指线程程序完全按照代码序列...
同步/异步并发模式
zoomdy's blog
05-08 718
异步并发模式高效,而同步并发模式更简单。高效和简单看起来是矛盾的特性,可以通过同步/异步的设计共存。lwIP 是应用了同步/异步并发模型的典型案例。
两种高效并发模式——同步/异步领导者/追随者模式
Y~哈哈哈的博客
04-26 388
一、并发模式中的同步异步的区别 1、同步:程序完全按照代码顺序执行(简单理解就是,我调用一个功能该功能没有结束前,我就一直死等结果) 2、异步:程序的执行需要由系统事件来驱动,常见的系统事件包括中断、信号等(简单理解为:调用一个功能,不需要指代该功能最后执行的结果,该功能有结果后再通知我就行(回调通知)。也可以理解为:数据拷贝的时候,进程是否阻塞来作为同步异步的区别)。常见的系统事件包括中...
Linux服务器--两种高效并发模式同步/异步模式领导者/追随者模式
闫钰晨的博客
07-29 4738
并发模式是指I/O处理单元和多个逻辑单元之间协调完成任务的方法1、同步/异步模式1.1同步/异步模式【1】同步:程序完全按照代码顺序执行;异步:程序的执行需要由系统事件来驱动。常见的系统事件包括中断,信号等。【2】同步线程:按照同步方式运行的线程;异步线程:按照异步方式运行的线程。 异步线程执行效率高,实时性强,但是程序相对负责,难以调试和扩展,不适合于大量的并发同步线程效率相
两种高效并发编程方式-同步/异步(half-sync/half-rsync)模式领导者/追随者(Leader/Followers)模式
dream0130__的博客
02-20 440
上节我们对于两种事件处理模式做了简要的分析,在这里我们对于两种高效并发编程方式来进行简单讨论,后序会继续完善 同步/异步方式 对于并发编程中的“同步"和"异步"是与I/O模型中的"同步"和"异步"是两种不同的概念 并发模式中,"同步"指的是程序完全按照代码序列的形式来执行的 -"异步"执行需要由系统事件来进行驱动 然而两种方法各有优缺点,异步线程虽然执行效率高,实施性很强,但是相对复杂.
I/O模型之同步 异步 阻塞 非阻塞 /////并发模式同步异步
Dave_lzw的博客
02-02 275
I/O模型之同步 异步 阻塞 非阻塞 同步I/O分为阻塞 与 非阻塞 异步I/O则不讨论阻塞与否(只需发出请求,不用读写,系统读写完毕通知回来处理数据 总结: 同步:执行一个操作之后,等待结果(同步阻塞是一直等待,同步非阻塞是每隔一段时间就回去询问数据是否读写完成),然后才继续执行后续的操作。 如同步I/O模型实现的Reactor事件处理模式:工作线程需要自己从socket读取数据 异...
高效并发模式同步异步领导者追随者
Dear_he的博客
11-22 596
首先来看同步异步到底是什么呢? 在计算机领域,同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。 而我们平时经常讨论的同步问题多发生在多线程环境中的数据共享问题...
高效并发模式同步/异步模式
柴犬小丸子的博客
08-08 905
一、基本概念 同步/异步模式中的“同步”和“异步”与“I/O模式”下的同步异步是有区别的,在I/O模式下,同步异步区分的是内核向应用程序通知的是何种I/O时间(是就绪事件还是完成时间),以及谁来完成I/O读写(是应用程序还是内核)。而在并发模式下,“同步”指程序完全按照代码顺序执行;“异步”指程序的执行需要系统事件来驱动。 显然异步线程的执行效率能高一点,实时性强,但是他适用于大量...
两种高效的事件处理模式 Reactor Proactor
qq_41899255的博客
07-27 197
Reactor模式: 主线程(IO处理单元)只负责监听文件描述符上是否有时间发生,有的话立刻将事件通知给工作线程(逻辑单元)。除此之外,主线程不做其他任何工作,读写数据,接受新的连接即处理客户请求均在工作线程中完成。 使用同步IO模型epoll_wait实现的Reactor模式的工作流程如下: 1. 主线程往epoll内核事件表中注册socket上的读就绪事件。 2. 主线程调用epoll...
线程池模式比较-------ICE线程池模型------L/F领导者跟随者模式
理性的幻想
05-11 1321
<br />转自http://blog.csdn.net/roger_77/archive/2007/04/07/1555170.aspx<br /> <br />程池模式一般分为两种:L/F领导者与跟随者模式、HS/HA同步/异步模式。 <br />HS/HA 同步异步模式 :分为三层,同步层、队列层、异步层,又称为生产者消费者模式,主线程处理I/O事件并解析然后再往队列丢数据,然后消费者读出数据进行应用逻辑处理; <br />优点:简化编程将低层的异步I/O和高层同步应用服务分离,且没有降低
MySQL异步复制和同步复制、强同步复制的区别
李榕茂的博客
07-30 2467
MySQL异步复制和同步复制、强同步复制的区别 异步复制: 应用发起数据更新(含insert、update、delete操作)请求,master在执行完更新操作后立即向应用程序返回响应,然后master在向slave同步数据。 数据更新过程中master不需要等待slave的响应,因此异步复制的数据库实例通常具有较高的性能,且slave不可以用并不影响master对外提供服务。但因数据并不是实时同步到slave,而master在slave有延迟的情况下发生故障则有较小的概率会引起数据不一致。 同步复制:
企业级运维——Mysql主从复制(异步同步、全同步
weixin_38044888的博客
07-30 1155
文章目录主从复制原理主从复制实验一、实验环境二、主从复制相关配置server1(master) 主从复制原理 基于日志点的主从复制、基于GTID的主从复制。 https://www.jianshu.com/p/169315f2124a?utm_source=oschina-app 主从复制实验 一、实验环境 两台rhel7.5的虚拟机,一台作为master,一台作为slave。 主机名(I...
并发模式——同步异步同步反应堆
最新发布
q1281405619的博客
04-09 1033
并发模式——同步异步同步反应堆
应用层和驱动层的同步异步的处理逻辑及底层实现
程序员人生
02-20 2614
应用层的实现: 1ReadFile、WriteFile、DeviceIoControl等,这些都有两种操作方式,一种是同步,一种是异步。 操作设备的Win32API主要是这3个函数ReadFile、WriteFile、DeviceIoControl 以DeviceIOControl为例,它的同步&异步操作如下: 同步操作时,它的内部会创建一个IRP_MJ_DEV
Java 同步异步
dieche6851的博客
06-14 345
同步:发送一个请求,等待返回,然后再发送下一个请求 异步:发送一个请求,不等待返回,随时可以再发送下一个请求 同步可以避免出现死锁,读脏数据的发生,一般共享某一资源的时候用,如果每个人都有修改权限,同时修改一个文件,有可能使一个人读取另一个人已经删除的内容,就会出错,同步就会按顺序来修改。异步则是可以提高效率了,现在cpu都是双核,四核,异步处理的话可以同时做多项工作,当然必须保证是可以...
区别:并行、并发同步异步
wangxiaosu的专栏
05-06 4269
个人理解这4个概念是从不同角度看:“多个任务被同时执行” 这件事。 从CPU的角度:并行、并发 从编程模式的角度:同步异步 1、并行、并发:CPU视角 (1)并行:多个任务真正意义上被同时执行,非多核CPU或者多CPU环境不行,即CPU的每个核同时执行不同的任务。 (2)并发:泛指多个任务被 “同时” 执行,这个 “同时” 可以是人类感觉上的 “同时”(即退化的伪并行),也可以是真正意义上的 “同时”(即真并行)。至于是 人类感觉上的“同时”(伪并行)还是真正的 “同时”(真并行),取决于任务运
生产者/消费者模式详解:降低耦合与提高灵活性
"架构设计:生产者/消费者模式是一种广泛应用于软件开发中的经典设计模式,它旨在解决生产和消费数据时的协调问题。这个模式的核心思想是将数据生产者和数据消费者通过一个共享的缓冲区进行交互,从而降低它们之间的...
写文章

热门文章

  • 给出一个整数,求出它是几位数,分别输出每一位数字,按逆序输出各位数字. 7150
  • C++编译之预编译 编译 汇编 链接 四个阶段 1342
  • C++中类和对象调用及生成 948
  • fork()函数的调用原理 787
  • Linux下4G虚拟地址空间的分布 687

分类专栏

  • C语言 4篇
  • Linux 4篇
  • C++ 4篇
  • 容器
  • STL容器 2篇

大家在看

  • 备忘录+生日+提醒+时间管理 一个桌面日历搞掂!超级好用~! 1003
  • 第2章 网页制作的排版方法 932
  • python绘制弦图-科研作图
  • Java-数据结构-排序-(二) (๑¯∀¯๑) 50
  • 如何使用数字人直播?

最新文章

  • 两种高效的事件处理模式 Reactor Proactor
  • 智能指针(一)
  • STL容器之vector容器
2019年9篇
2018年9篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

天下网标王获嘉推广网站搭建优化安国网站怎么优化北京移动网站优化平台收费标准南城网站优化外包seo兼职优化网站巴音郭楞蒙古网站优化绍兴优化网站哪家公司好台州企业网站优化推广醴陵市网站seo优化排名郑州外语网站建站优化漯河营销型网站全网优化宣城网站关键词优化哪家服务好淮南网站优化公司哪里有网站营销网站优化娄底外贸网站优化网站关键词优化恰当易速达淘宝里的网站优化靠的住吗佳木斯优化网站地址新兴新站网站优化鹤壁网站推广优化多少钱厦门网站建设网站优化安阳县网站优化哪家价位低关于淘宝网站的SEO优化方案壹起航如何提高网站优化seo网站优化推广是什么意思谷城网站优化公司网站优化会计分录网站优化更新内容是真的吗聊城响应式网站优化公司聊城网站优化费用香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化