基于乐观锁的配置server与XServer的交互
XServer与配置server,配置server保存有XServer的配置文件里的信息。
怎样在项目启动时。让XServer从配置server中获取到自己的配置信息,并达到通信资源的节省与控制。
通信例如以下:
XServer与配置server都启动,没有先后顺序之分。初始配置server知道XServer的XServerHost和XServerPost,可是XServer不知道配置server的CfgHost和CfgPort;
配置server启动线程不停的向XServer发送信息Info1。信息Info1包括配置server的CfgHost和CfgPort。以及XServer的配置文件的版本XServerCfgVersion=V1;
XServer收到CfgHost、CfgPort、XServerCfgVersion后。推断从本地存储的配置文件里自己的版本V2和V1的关系。假设V1=V2。向配置server发送NotRequestResource事件,意思是我不须要别的东西了,结束。假设V1!
=V2,记录标记flag=true(初始flag=false);
XServer连接配置server的类中启动一个线程不停的推断标记flag。假设flag=true,就向配置server发送RequestResource事件,意思是版本不一样,我要我的配置资源。假设flag=false。啥都不干。
配置server收到RequestResource事件,做两件事情,一是停止发送信息Info1。二是不停的向XServer发送它的配置资源信息Info2,Info2中除了XServer的配置资源信息外。还有配置server的CfgHost和CfgPort。
XServer收到Info2后,将Info1和Info2都写入到本地配置文件里,之后全部的读取都从本地配置文件里读取,同一时候使flag=false,然后向配置server发送确认消息Info3;
配置server收到Info3后。停止向XServer发送信息Info2,结束。
注意问题:
假如当XServer和配置server都在执行中。这时配置server修改了XServer的配置资源,事件触发这时配置server得不停向XServer发送Info1和Info2,直到收到确认Info3;
假如XServer和配置server都在执行中,一是突然配置server断了,稍后重新启动。向XServer发送Info1,XServer收到后推断V1=V2。发送NotRequestResource,结束;二是突然XServer断了,分两种可能。断期间配置server中XServer的配置资源未改,重新启动XServer无碍。断期间配置资源修改了,一旦修改,执行上面的不停向XServer发送Info1和Info2。等到XServer重新启动,也能收到Info1和Info2,不影响系统。
假如XServer收到Info1后,发送RequestResource事件。配置server收到RequestResource事件。停止了Info1发送。但Info2发送前。
– XServer断掉,分两种情况。一是配置serverCfgHost和CfgPort不变。配置server因为未收到确认Info3而一直发送Info2。重新启动XServer,XServer能收到Info2。这里加Info3确认能够。也能够在配置server端监听连接,有服务模块连接到它,它就向之发送Info1。这时上面的情况中当重新启动XServer。配置server检測到XServer连接到它了,发送Info1。二是期间配置serverCfgHost和CfgPort改变了,配置server因为未收到确认Info3而一直发送Info2,假设Info2中不带CfgHost和CfgPort,那么万一下次指不定什么时候XServer断开了,因为配置server的CfgHost和CfgPort改了,就再也连不上了;
–配置server断掉了,重新启动配置server,它发送Info1。不影响系统。
基于乐观锁的配置server与XServer的交互的更多相关文章
- 3:基于乐观锁(两种)控制并发: version、external锁
ES是基于乐观锁进行并发控制的. 如果有并发的业务场景,可以直接使用ES内置乐观锁机制. 使用的时候,java程序需要先Get指定的记录,获取到版本号,然后Put的时候,带着该版本号,请求更新. ES ...
- Java并发 行级锁/字段锁/表级锁 乐观锁/悲观锁 共享锁/排他锁 死锁
原文地址:https://my.oschina.net/oosc/blog/1620279 前言 锁是防止在两个事务操作同一个数据源(表或行)时交互破坏数据的一种机制. 数据库采用封锁技术保证并发操作 ...
- JAVA乐观锁实现-CAS
是什么 全称compare and swap,一个CPU原子指令,在硬件层面实现的机制,体现了乐观锁的思想. JVM用C语言封装了汇编调用.Java的基础库中有很多类就是基于JNI调用C接口实现了多线 ...
- B8 Concurrent JDK中的乐观锁与原子类
[概述] 乐观锁采用的是一种无锁的思想,总是假设最好的情况,认为一个事务在读取数据的时候,不会有别的事务对数据进行修改,只需要在修改数据的时候判断原数据数据是否已经被修改了.JDK 中 java.ut ...
- java多线程系列3:悲观锁和乐观锁
1.悲观锁和乐观锁的基本概念 悲观锁: 总是认为当前想要获取的资源存在竞争(很悲观的想法),因此获取资源后会立刻加锁,于是其他线程想要获取该资源的时候就会一直阻塞直到能够获取到锁: 在传统的关系型数据 ...
- MyBatisPlus乐观锁,乐观锁竟然如此简单
乐观锁 在便是过程中,我们经常会被问到乐观锁,悲观锁,都非常简单 乐观锁:顾名思义,思想十分乐观,总是认为不会出现问题,无论什么都不去上锁!如果出现了问题,就再更新测试 悲观锁:顾明思义,思想十分悲观 ...
- redis乐观锁
乐观锁(又名乐观并发控制,Optimistic Concurrency Control,缩写"OCC"),是一种并发控制的方法.它假设多用户并发的事务在处理时不会彼此互相影响,各事 ...
- AtomicInteger源码分析——基于CAS的乐观锁实现
AtomicInteger源码分析——基于CAS的乐观锁实现 1. 悲观锁与乐观锁 我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时 ...
- AtomicInteger源码分析——基于CAS的乐观锁实
1. 悲观锁与乐观锁 我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时间片之间,需要进行cpu切换,也就是会发生进程的切换.切换涉及 ...
随机推荐
- Java从零开始学二十八(Math类和Random类)
一.Math概述 提供了常用的数学运算方法和两个静态常量E(自然对数的底数)和PI(圆周率) 二.常用方法 package com.pb.demo1; public class MathTest { ...
- CAE医疗综合视听中心管理系统
http://caehealthcare.com/eng/audiovisual-solutions/learning-space https://vimeo.com/108897296http:// ...
- ThinkPHP的A方法,R方法,M方法,D方法区别
在Thinkphp中,实例化对象有这么几种方法,如果是类,有A和R方法,区别是A方法只是对象的实例化,而R方法是可以同时实例化对象里面的方法的,这里需要去指定,如下面的实例代码: <?php n ...
- Linux RAID简介
现代磁盘的缺陷:IO性能极弱,稳定性极差 RAID廉价磁盘冗余阵列:通过多磁盘并行运行来提高计算机的IO性能,在创建RAID时要求硬盘大小.品牌.型号一样 RAID可分为多种,称之为RAID级别,现代 ...
- Bootstrap系列 -- 15. 下拉选择框select【转发】
<form role="form"> <div class="form-group"> <select class="f ...
- 网速变慢解决方法.Tracert与PathPing(转)
Tracert命令与PathPing命令你常用吗: 前段时间本网吧网速不太正常.每晚8点后到11点之间网速爆慢.其余时间则正常.在8~11点间PING电信DNS TIME值要100多MS以上,但PIN ...
- VC 线程间通信的三种方式
1.使用全局变量(窗体不适用) 实现线程间通信的方法有很多,常用的主要是通过全局变量.自定义消息和事件对象等来实现的.其中又以对全局变量的使用最为简洁.该方法将全局变量作为线程监视的对象,并通 ...
- C实现9种排序算法
算法复杂度以及稳定性分析 算法名称 平均时间 辅助空间 稳定性 冒泡排序 O(n2) O(1) 是 选择排序 O(n2) O(1) 否 插入排序 O(n2) O(1) 是 自底向上归并排序 O(nlo ...
- Python 随机数 random
1. Python seed() 函数 seed() 方法改变随机数生成器的种子,可以在调用其他随机模块函数之前调用此函数. seed( )是不能直接访问的,需要导入 random 模块,然后 ...
- automake安装出错
automake命令出错 configure.ac:64: error: possibly undefined macro: AM_ICONV If this token and others ...