CAS

Fabric基础知识

流过昼夜 提交于 2020-08-18 20:46:58
Fabric基础知识 简介 基础概念 MSP分级 简介 Hyperledger Fabric是一个开放源代码企业级许可分布式账本技术(DLT)平台,旨在用于企业环境中,是第一个支持以通用编程语言(例如Java,Go和Node.js)而非受约束的领域特定语言(DSL)编写的智能合约编写的分布式分类帐平台。 基础概念 陶老师的博客—— https://blog.csdn.net/russell_tao/article/details/80459698 官方文档—— https://hyperledger-fabric.readthedocs.io/zh_CN/latest/membership/membership.html ChainCode——链码,也称智能合约。自动判断条件满足,执行的回调脚本(如补偿扣款,自动还款) MSP——Membership Service Provider,基于CA认证的身份信息验证服务。它定义了对于自己所在的 Peer 节点的信任域 (比如,组织) 节点本地 MSP 定义了节点的权限(比如,谁是节点管理员),同时也包含了对已注销过期的信息 用户的本地 MSP 允许用户在交易中证明自己是通道的成员(比如在链码交易中),或者系统中指定角色的所有者(比如,在配置交易中的组织管理员) 同属于一个Channel中的组织

奈学:reaseShared共享式释放锁

拥有回忆 提交于 2020-08-18 20:36:31
共享锁的释放是通过调用releaseShared模版方法来实现的。大概步骤为: 调用tryReleaseShared尝试释放共享锁,这里必须实现为线程安全。 如果释放了锁,那么调用doReleaseShared方法环迅后继结点,实现唤醒的传播。 对于支持共享式的同步组件(即多个线程同时访问),它们和独占式的主要区别就是tryReleaseShared方法必须确保锁的释放是线程安全的(因为既然是多个线程能够访问,那么释放的时候也会是多个线程的,就需要保证释放时候的线程安全)。由于tryReleaseShared方法也是我们自己实现的,因此需要我们自己实现线程安全,所以常常采用CAS的方式来释放同步状态。 /** * 共享模式下释放锁的模版方法。 * ,如果成功释放则会调用 */ public final boolean releaseShared(int arg) { //tryReleaseShared释放指锁 if (tryReleaseShared(arg)) { //释放成功,必定调用doReleaseShared尝试唤醒后继结点 doReleaseShared(); return true; } return false; } 本文来源于:奈学开发者社区,如有侵权,请联系我删除~ 来源: oschina 链接: https://my.oschina.net/u

【JavaSE 并发CAS】原理层面:CAS(AtomicInteger类compareAndSet()方法到底干了什么?)

社会主义新天地 提交于 2020-08-18 14:33:00
文章目录 一、前言 二、CAS操作 2.1 CAS三步操作+CAS与阻塞同步的对比+三种锁 2.1.1 CAS三步操作 2.1.2 CAS与内建锁比较 2.1.3 三种锁 2.2 CAS的应用:AtomicInteger类中的compareAndSet()方法使用for+if(cas)保证线程安全 2.2.1 从AtomicInteger类incrementAndGet()方法的源码出发,开启底层探索 2.2.2 继续深入AtomicInteger类的compareAndSet方法 2.2.3 继续深入native compareAndSwapInt()方法 2.2.4 继续深入UNSAFE_ENTRY()方法 2.2.5 继续深入的Atomic::cmpxchg() 三、CAS的ABA问题 3.1 什么是ABA问题(理论解释,一图就好了) 3.2 代码重现ABA问题(代码,面试没用) 3.3 ABA问题:原因、突破口、解决方式、源码支持 3.3.1 ABA问题的产生原因(背诵) 3.3.2 ABA问题:从原因到突破口再到解决方式(背诵) 3.3.3 ABA问题两个类的源码:不仅比较数值,还有比较当前的数值是否被修改过 1、AtomicStampedReference类 2、AtomicMarkableReference类 3.4 代码解释ABA问题两个类处理 3.4.1

多线程实现发布订阅升级版

一曲冷凌霜 提交于 2020-08-18 12:50:41
实际中是指定个数生产者,指定个数消费者,容器大小指定,要生产的产品个数指定的情况 场景为,生产者2个,消费者2,容器大小为5,要生产的商品数量为100 生产者类如下 /** * Created by yuyunbo on 2020/5/13. */ public class ProductObjectOne implements Runnable { @Override public void run () { while ( true ) { MessageVO messageVO = new MessageVO(PudConThread. hasProductTotal .get() , UUID. randomUUID ().toString() , "ProductObjectOne---this is pubsub test" ) ; if (PudConThread. hasProductTotal .get() >= PudConThread. total ) { System. out .println( " 产品已达上限,停止生产 " ) ; return; } try { PudConThread. arrayBlockingQueue .put(messageVO) ; } catch (InterruptedException e) { e

博客园自定义美化项

左心房为你撑大大i 提交于 2020-08-18 10:05:34
背景粒子连线JS代码 CSS #cas{ position: fixed ; top: 0 ; left: 0 ; width: 100 % ; } 侧边栏公告 <script> // 这是背景粒子连线js代码 var canvas = document.createElement( " canvas " ) canvas.id = " cas " document.body.appendChild(canvas) var ctx = canvas.getContext( " 2d " ); resize(); window.onresize = resize; function resize() { canvas.width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; canvas.height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; } var RAF = (function() { return window.requestAnimationFrame || window

【面试】如果你这样回答“什么是线程安全”,面试官都会对你刮目相看

懵懂的女人 提交于 2020-08-18 07:58:01
有读者跟我说,喜欢看我的文章,说很容易读,我确实在易读性上花费的心思不亚于在内容上。因为我不喜欢一上来就堆很多东西,而且把简单的东西搞得复杂人人都会,但是把复杂的东西讲的简单,确实需要非常多的思考。 不是线程的安全 面试官问:“什么是线程安全”,如果你不能很好的回答,那就请往下看吧。 论语中有句话叫“学而优则仕”,相信很多人都觉得是“学习好了可以做官”。然而,这样理解却是错的。切记望文生义。 同理,“线程安全”也不是指线程的安全,而是指内存的安全。为什么如此说呢?这和操作系统有关。 目前主流操作系统都是多任务的,即多个进程同时运行。为了保证安全,每个进程只能访问分配给自己的内存空间,而不能访问别的进程的,这是由操作系统保障的。 在每个进程的内存空间中都会有一块特殊的公共区域,通常称为堆(内存)。进程内的所有线程都可以访问到该区域,这就是造成问题的潜在原因。 假设某个线程把数据处理到一半,觉得很累,就去休息了一会,回来准备接着处理,却发现数据已经被修改了,不是自己离开时的样子了。可能被其它线程修改了。 比如把你住的小区看作一个进程,小区里的道路/绿化等就属于公共区域。你拿1万块钱往地上一扔,就回家睡觉去了。睡醒后你打算去把它捡回来,发现钱已经不见了。可能被别人拿走了。 因为公共区域人来人往,你放的东西在没有看管措施时,一定是不安全的。内存中的情况亦然如此。 所以线程安全指的是

【原创】Java并发编程系列27 | ConcurrentHashMap(下)

拥有回忆 提交于 2020-08-18 00:27:55
   20 大进阶架构专题每日送达    2020年Java面试题库连载中    正文      上一篇详细分析了 HashMap 源码,介绍了 HashMap 的数据结构以及并发编程中 HashMap 的问题,这篇就来看下 ConcurrentHashMap 。因为 ConcurrentHashMap 与 HashMap 结构是一样的,本文将重点介绍 ConcurrentHashMap 在并发编程中如何保证线程安全:   关键属性   put()方法   扩容    如何保证线程线程安全   使用误区   1. 关键属性    table :用来存放Node结点数据;    Node :结点,保存key-value的数据结构;    nextTable :扩容时新生成的数据,数组为table的两倍;    ForwardingNode :特殊的Node结点,hash值为-1,其中存储nextTable的引用。扩容时,作为一个占位符放在table中表示当前结点为null或则已经被移动。    sizeCtl :控制标识符   负数代表正在进行初始化或扩容操作   -1 代表正在初始化   -N 表示有N-1个线程正在进行扩容操作   正数 如果当前数组为null,表示table在初始化过程中,sizeCtl表示为需要新建数组的长度   正数 若table已经初始化了,表示临界值

【Java】手动模拟实现一个AQS

…衆ロ難τιáo~ 提交于 2020-08-17 16:44:10
什么是AQS? synchronized(基于底层C++,语言实现的同步机制) Aqs同步器(Java实现) 【Unsafe】魔法类 绕过虚拟机,直接操作底层的内存 话不多说,我们手动模拟一个AQS: 1》锁对象: package com.example.demo.thread.current; import com.example.demo.util.UnsafeInstance; import sun.misc.Unsafe; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.locks.LockSupport; /* * * 公平锁 * * @author Code Farmer * @date 2020/5/28 22:47 */ public class AqsLock { /* * * 当前加锁状态,记录加锁的次数 */ private volatile int state = 0 ; /* * * 当前持有锁的线程 */ private Thread lockHolder; private ConcurrentLinkedQueue<Thread> waiters = new ConcurrentLinkedQueue<>(); // 基于CAS保证入队出队安全

NoSQL之一:Memcached

别说谁变了你拦得住时间么 提交于 2020-08-17 16:26:46
一、NoSQL简介 NoSQL并不是No SQL(不再需要SQL),而是指Not Only SQL(不仅仅只有SQL)。NoSQL并不是用来替代关系型数据库的,而是在某些使用关系型数据库不合适的场景中,可以使用NoSQL数据库进行优化,而在系统中主要的、常规的数据仍然使用关系型数据库。   常用的NoSQL数据库有Memcached、Redis、MongoDB等,其中前两者属于键值对数据库,后者属于文档数据库。它们都有各自的优缺点以及使用场景。 二、Memcached介绍与安装 Memcached是一个专门用来做缓存的数据库,缓存的数据都是在内存当中,当数据库重启之后,数据也就都丢失了。其相当于一个Dictionary键值对集合,根据Key值取Value值。   1、Memcached安装    从网上下载Memcached-win64-1.4.4-14.zip安装包。解压后,通过管理员权限执行如下命令,可将其安装成服务: G:\MemcachedAfterInstall>memcached.exe -d install   2、Memcached可视化工具     TreeNMS是一款Redis、Memcached可视化客户端工具,实现基于Web方式对Redis、Memcached数据库进行管理、维护。可通过如下链接 http://www.treesoft.cn/dms.html

Fabric CA 官方用户指南

谁说我不能喝 提交于 2020-08-17 15:17:34
一、Fabric CA概述 ​ 二、开始使用 (一)先决条件 (二)安装Fabric-ca (三)启动服务方式 三、Fabric CA Server (一)初始化Server (二)启动Server (三)配置数据库 1. PostgreSQL 2. MySQL (四)配置LDAP (五)配置多个CAs 四、Fabric CA Client (一)登记引导身份 (二)注册新身份 (三)登记身份 (四)从其他CA服务器获取CA证书链 (五)重新登记身份 (六)撤销证书或身份 (七)通过命令生成CRL (八)基于属性的访问控制 (九)动态服务器配置更新 1. 使用fabric-ca-client命令动态更新身份 2. 获取身份信息 3. 添加身份 4. 修改身份 5. 移除身份 6. 添加组织关系 7. 修改组织关系 8. 移除组织关系 9. 列举组织关系信息 (十)指定特定的CA实例 (十一)启动中间CA 五、证书格式 六、Fabric-CA-Client配置文件 七、Fabric-CA-Server配置文件 一、Fabric CA概述 Fabric Server端由一个服务器集群组成,以树形架构组织CA Server节点,包含一个Root 节点和多个中间节点。每个CA要么是根CA,要么是中间CA。每个中间CA都有一个父CA,它要么是根CA,要么是另一个中间CA。