Leader/Follower相比较于普通的ThreadPool的优点
1、无需context switch,减少了线程间数据copy
2、无需维护一个队列,占用而外的内存空间
lf模式理解起来稍微有些困难,所以写了一个小的事例程序帮助自己理解
public class ThreadPool {
private final static Object monitor = new Object();
private final static int THREAD_POO_SIZE = 5;
private Reactor handleSet = new Reactor();
public ThreadPool(Reactor handleSet) {
this.handleSet = handleSet;
}
public void init() {
for (int i = 0; i < THREAD_POO_SIZE; i++) {
new WorkThread(this).start();
}
this.promoteNewLeader();
}
public void join() {
for (;;) {
waitToLeader();
// select, blocking
Handle handle = handleSet.select();
// promote new leader
promoteNewLeader();
// process handl
handleSet.handle(handle);
// reenter to next loop
}
}
private void waitToLeader() {
synchronized (monitor) {
try {
monitor.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void promoteNewLeader() {
synchronized (monitor) {
monitor.notify();
}
}
class WorkThread extends Thread {
ThreadPool tp;
public WorkThread(ThreadPool tp) {
this.tp = tp;
}
@Override
public void run() {
tp.join();
}
}
}
在lf模式中,线程有3种状态
它们通过以下两个方法来实现切换:
waitToLeader
promoteNewLeader
利用了java线程间通信的特性, 实现leader/follower线程的切换
目前java实现线程间通信,有两种方法:
1、Object.wait, Object.notify
2、Condition.await, Condition.signal
另一个疑问,就是要在系统初始化好后,调用promoteNewLeader,提升一个线程作为leader thread,监听事件的到来。
lf thread pool改进点:
1、thread pool大小可调节,可以参考ThreadPoolExecutor的实现
2、更多通用化,抽取变化点
Leader/Follower 论文参考:
http://www.kircher-schwanninger.de/michael/publications/lf.pdf
http://www.cse.wustl.edu/~schmidt/PDF/reactor-siemens.pdf
http://www.cse.wustl.edu/~schmidt/PDF/proactor.pdf
- 大小: 17.9 KB
分享到:
相关推荐
### 领导者/跟随者模式 (Leader/Followers Pattern) #### 概述 领导者/跟随者模式(Leader/Followers Pattern)是一种高效的多线程设计模式,它旨在优化多线程环境下输入/输出(I/O)事件的处理效率。这种模式允许...
具体来说,该模式包括两个主要的角色:**领导者(Leader)**和**跟随者(Follower)**。 - **领导者(Leader)**负责接收客户端的请求,并将这些请求分发给不同的**跟随者**进行处理。 - **跟随者(Follower)**则专注于...
总结起来,"网络游戏-基于Ad-Hoc网络和leader-follower算法的多机器人编队方法"这一主题展示了如何利用先进的通信技术和控制策略来实现游戏中的多机器人协作。这种技术的应用不仅增加了游戏的真实感和挑战性,也为...
iRpc介绍iRpc为一款基于Nio通信实现的轻量级高性能rpc框架,支持单机及leader-follower部署模式,配置简单,通信效率高。提供同步和异步(callBack模式)等多种消息发送方式,不依赖于第三方注册中心即可实现服务端自主...
- `Leader/Follower/Learner`:领导者选举机制中的角色,保证了Zookeeper的高可用性。 - `QuorumPeer`:每个Zookeeper服务器的角色,实现选举算法和数据同步。 3. **协议与通信**: - **ZooKeeper通信协议**:...
这种策略的优势在于简单易实现,能够有效控制多机器人系统的复杂度,特别适合于需要形成特定队形的任务场景。 **2. 多栖球形机器人:** 这类机器人设计用于同时适应水下和陆地环境的操作任务。其外形为球形,可以...
此外,FE采用主从(Leader/Follower)和观察者(Observer)模式,增强了服务的可用性。 通过以上介绍,我们可以看到Apache Doris 是一个针对大数据分析场景设计的高性能分布式数据库,它提供了快速、灵活且易于使用...
在广播模式下,一旦 leader 已经和多数的 follower 进行了状态同步后,它就可以开始广播消息了,即进入广播状态。 ZooKeeper 有四种类型的数据节点 Znode:持久节点、临时节点、顺序节点、临时顺序节点。 ...
- `zkServer.sh status`命令可以查看Zookeeper服务器的状态,包括模式(leader/follower/standalone)、连接的客户端数量等。 7. **故障恢复与数据一致性**: - ZAB协议确保在分布式环境中数据的一致性,即使在...
BeansDB采用了N个worker线程的模型,其中Leader/follower模式保证了线程之间的高效协同工作,同时通过写缓存的方式实现了后台定时或定量地将数据写入磁盘,减少了对数据文件的频繁访问,提高了系统的稳定性和性能。...
本文将深入Zookeeper的源码,探讨Leader选举的实现机制。 **为什么要阅读Zookeeper源码?** 1. **提升技术功底**:通过阅读源码,可以学习到优秀的设计思想,了解解决复杂问题的策略,以及常见的设计模式,从而...
当发生 Leader 崩溃或网络问题时,ZAB会进入恢复模式,通过选举新Leader并完成状态同步来恢复服务。Zookeeper默认监听的端口是2181。 创建ZNode的命令格式为`create /path data [options]`,例如创建一个临时有序...
此外,Zookeeper 采用主从复制的架构,通过 Leader-Follower 模式确保数据的高可用性。当 Leader 宕机时,Follower 会通过选举产生新的 Leader,从而保证服务的连续性。 在 Linux 环境下安装 Zookeeper 3.6.3,首先...
例如,输出的"Mode: follower"表明该节点是Follower,"Mode: leader"则表示是Leader。值得注意的是,Observer角色默认不被启用,如果要启用Observer模式,需要在相关节点的配置文件中添加`peerType=observer`,并...
OceanBase相关知识点总结 OceanBase是一个关系型数据库管理...Leader表示主副本,数据库服务的弱一致性读以及写服务均是由Leader提供的,Follower表示从副本,为Leader同步的数据进行投票,并提供强一致性读服务。
为了保证系统的高可用性,ZooKeeper 采用多副本的方式部署,当主节点(Leader)发生故障时,可以从备份节点(Follower)中选举出新的 Leader。 **数据一致性:** ZooKeeper 使用 ZAB 协议(ZooKeeper Atomic ...
ZooKeeper集群中的服务器可以扮演不同的角色,主要包括Leader、Follower和Observer三种角色。Leader负责协调集群活动,Follower参与投票并接收Leader的指令,Observer只参与投票但不参与选举过程。 #### 14. ...