领导者/追随者(Leader/Followers)模型和半同步/半异步(half-sync/half-async)模型

领导者/追随者(Leader/Followers)模型和半同步/半异步(half-sync/half-async)模型都是常用的客户-服务器编程模型。这几天翻了些文章,发现对领导者/追随者模型说的比较少,下面就这个模型打个比方:

  1. 话说一个地方有一群有组织无纪律的人从事山贼这个很有前途的职业。
  2. 一般就是有一个山贼在山路口察看,其他人在林子里面睡觉。
  3. 假如发现有落单的过往客商,望风的山贼就会弄醒一个睡觉的山贼,然后自己去打劫。
  4. 醒来的山贼接替作望风的事情。
  5. 打劫的山贼搞定以后,就会去睡觉,直到被其他望风的山贼叫醒来望风为止。
  6. 有时候过往客商太多,而山贼数量不够,有些客商就能侥幸平安通过山岭(所有山贼都去打劫其他客商了)。

下面是这个模式的计算机版本:

  领导者/追随者(Leader/Followers)模型和半同步/半异步(half-sync/half-async)模型 - Miracle - Miracles Space

  1. 有若干个线程(一般组成线程池)用来处理大量的事件
  2. 有一个线程作为领导者,等待事件的发生;其他的线程作为追随者,仅仅是睡眠。
  3. 假如有事件需要处理,领导者会从追随者中指定一个新的领导者,自己去处理事件。
  4. 唤醒的追随者作为新的领导者等待事件的发生。
  5. 处理事件的线程处理完毕以后,就会成为追随者的一员,直到被唤醒成为领导者。
  6. 假如需要处理的事件太多,而线程数量不够(能够动态创建线程处理另当别论),则有的事件可能会得不到处理。

这个模型其实并不难于理解,但是我想假如是中国人给起的名字的话,也许会叫作 "皇帝轮流做,今年到我家" 模型更加贴切,因为领导者追随者之间是一种平等的关系。这不符合大部分人对于"领导者-追随者"的通常意义的理解。说句实话,个人认为半同步/半异步模型 叫做"领导者-追随者'更加适合,不相信可以看看例子:

  1. 话说一个地方有一群有组织无纪律的人从事山贼这个很有前途的职业。
  2. 他们有一个山贼头头,他专门负责望风,其他的喽罗待命。
  3. 假如发现有落单的过往客商,山贼头头会到路口拦路,让客商双手抱头蹲在地上,然后让一个小喽罗为这个倒霉鬼"服务"。
  4. 假如客商很多,山贼头头会让客商在地上蹲成一排(严肃点,排队啦,打劫啦)。 一群小喽罗挨个为大家"服务"。
  5. 头头的工作很重要,对于每个客商他都不会花费太多时间,拦路以后,他会让客商排队等待打劫。
  6. 过往客商太多而山贼数量不够,客商的排队可能需要等待较长的时间。

这个就是半同步/半异步模型的比喻,可以参考一下 http://www.javaeye.com/article/60414

大家可以看到这两个模式之间的区别,最显著的,就是半同步/半异步模型拥有一个显式的待处理事件队列,而领导者-追随者模型没有一个显式的队列(很 多IO机制操作系统一般会有一个隐式的队列)。因为这个事件队列,半同步/半异步模型可以获得处理上的灵活性,但是因为上下文的切换,效率上却比领导者- 追随者模型稍有不及。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络编程模型综述 之 成熟的IO框架介绍

ACE “重量级的C I/O框架,用面向对象实现了一些I/O策略和其它有用的东西,特别是它的Reactor是用OO方式处理非阻塞I/O,而Proactor是用OO方式处理异步I/O的( In particular, his Reactor is an OO way of doing nonblocking I/O, and Proactor …

网络编程模型综述 之 多线程模型

每个连接对应一个线程 一个网络socket对应一个处理线程,socket采用阻塞I/O模型; 这种模型是小程序和java常用的策略,对于交互式的长连接应用也是常见的选择(比如BBS),也常用来做内部服务器交互的模型。这种策略很难满足高性能程序…

已知两边求角度公式_有30度角的直角三角形,已知一直角边,求另两边的公式,快速求法...

有30度角的直角三角形,已知一直角边,求另两边的公式,快速求法以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!有30度角的直角三角形,已知一直角…

jQuery 实现一个简单的信息反馈或者信息收集的页面

部分技术: jquery Form validation .NET handler ASP.NET Email notification.页面为简单的纯HTML Js 定义,提交表单通过jQuery 进行表单验证,提示友好的验证信息。表单验证成功 ,使用jQuery ajax 提交到ASP.NET 后台代码 Han…

网络编程模型综述 之 UNIX网络I/O模型

阻塞I/O Socket设置为阻塞模式,当socket不能立即完成I/O操作时,进程或线程进入等待状态,直到操作完成。如下图: 这种模型非常经典,也被广泛使用,优势在于非常简单,等待的过程中占用的系统资源微…

大叔手记(21):汤姆大叔博客园开博100天总结

介绍 昨天是注册博客园的第100天,截止到今天大叔发了99篇帖子,加上今天这篇总共100篇,想来也应该来个总结了,本来是昨天写总结的,但由于加班,于是挪到今天了。 为何开博 博客这种事物在兴起的时候就已经知道…

java $和$$的区别_Java #{}和${}区别

Mybatis中使用#{}可以防止sql注入#{}: 表示一个占位符号,实现向PreparedStatement占位符中设置值(#{}表示一个占位符?),自动进行Java类型到JDBC类型的转换(因此#{}可以有效防止SQL注入).#{}可以接收简单类型或PO属性值,如果parameterType传输的是单个简单类型值,#{}花括号中可…

half-sync/half-async 和 Leader/Followers 模式的主要区别

在 《POSA2》 一书中,关于这两个模式有两个很形象的比喻:半同步/半异步(half-sync/half-async):许多餐厅使用 半同步/半异步 模式的变体。例如,餐厅常常雇佣一个领班负责迎接顾客,并在餐厅繁忙时…

JAVA中的IO系统详解

Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。 Java 内用 Unicode 编码存储字符,字符流处理类负责将外部…

Windows 8 JavaScript Metro应用程序--入门(上)

Windows 8 JavaScript Metro应用程序--入门(上) 如你所知的Windows8允许你通过以下几种方式创建Metro应用程序: CC# JavaScript第一部分将侧重于主体结构和JavaScript Grid 应用程序的基础,在随后的文章中我将深度探究在Windows8中…

如何构建自己的SIP SERVER!

如果你下载了 sip phone, 自己又做了一个 SIP SERVER,那么你就可以当老大了,不要什么MSN,QQ的语音通话了,自己就可以直接同你想要的人通话了。1:软件准备:A: SIP SERVER http://www.brekeke.com/en/download/idx_sipse…

mac java版本 不一致_mac实现不同版本的jdk切换

之前使用jdk11进行java开发(纯粹因为喜欢新版?)但是使用jdk11在布署hadoop伪分布时各种报错, 所以还是下载jdk8回来.接下来就是mac端切换两个版本的jdk(按照网上找的方式好像有bug-文章最后再说.虽然不知道怎么解决,但是至少我可以成功部署hadoop, 所以这里就先忽略)首先下载j…

Meld安装

Ubuntu下文件/目录对比的软件Meld可能有很多用户还不是很熟悉,下文就给大家介绍如何安装Meld和移植到Gedit下。具体内容如下所述。 Meld允许用户查看文件、目录间的变化。很容易移植到Gedit下,方便用户使用。 安装Meld Meld默认在Ubuntu官方源中&#…

[译]预留位置队列PRQueue:多线程程序中消息输入队列和消息输出队列保持同序...

译自: http://accu.org/var/uploads/journals/overload101.pdf 在多线程应用程序中,要求消息输入队列和消息输出队列顺序要求保持一致,而忽略多线程并发处理的顺序,这种情况是比较难处理的。在本文中,作者设计了一种新…

java 前端工作内容_java前端、java后端、java全栈工作主要内容是什么?哪个薪资高?...

摘要最近,听了一场关于java全栈工程师职位的简介说明,里面很清楚的说明了一下前端,后端,全栈都是做什么工作的。其实,想做这个行业,就应该了解职能以及技能需求,这样学习才能更高效。我知道一些…

OpenGL ES 2.0 for iPhone Tutorial

来源:http://www.raywenderlich.com/3664/opengl-es-2-0-for-iphone-tutorial If youre new here, you may want to subscribe to my RSS feed or follow me on Twitter. Thanks for visiting! Learn how to use OpenGL ES 2.0 from the ground up! OpenGL ES is th…

java种子填充_种子填充实例运行出问题

种子填充实例运行出问题import java.awt.*;import java.applet.*;import java.awt.image.ImageProducer;import java.awt.image.MemoryImageSource;import java.util.Stack;public class scanseed extends Applet {private static final long serialVersionUID 1L;int redColo…

java幂等性原理_Java接口幂等性设计原理解析

在微服务架构下,我们在完成一个订单流程时经常遇到下面的场景:一个订单创建接口,第一次调用超时了,然后调用方重试了一次在订单创建时,我们需要去扣减库存,这时接口发生了超时,调用方重试了一次…

java web Jersey_使用CXF和Jersey框架来进行Java的WebService编程

CXFCXF是在xfire的基础上实现的。1)首先呢,还是包的问题,在http://cxf.apache.org/download.html这里可以下到最新版的CXF,当然,我用的是最新版的。接下来还是那句废话,建WEB项目,放入JAR包。而JAR包我们就…

S3C2440与SDRAM的地址连线分析

S3C2440有27根地址线ADDR[26:0],8根片选信号ngcs0-ngcs7,对应bank0-bank7,当访问bankx的地址空间,ngcsx引脚为低电平,选中外设。 2^272^7 * 2^10 * 2^10 128Mbyte 8*128Mbyte 1Gbyte 所以S3C2440总的寻址空间是1Gbyte。 市面…