CAS

CAS客户端集群

巧了我就是萌 提交于 2020-12-22 06:18:30
##环境变量定义## CAS_CLIENT_HOME : CAS Java客户端源码包目录(版本:3.2.1) NGINX_HOME:nginx安装目录(版本:1.4.1) PHP_HOME :php安装目录(版本: 5.5.1) CATALINA_HOME: tomcat安装目录(版本: 7.0.42) 网络拓扑 集群原理 不管是Java还是PHP,还是其他语言的CAS客户端,集群要解决问题就是session同步。如果客户端在本地内存记录了与登陆状态有关的数据,那么这部分代码需要进行改造——把这部分的数据共享出去。 ###CAS JavaEE客户端集群 ### 我们以tomcat 7自带的例子examples应用为例。假设你已经按照 这里 配置好,下面只需配置session同步以及同步单点登出。session同步不在这里累述。 需要注意的是 ,web.xml中的 casServerUrlPrefix , casServerUrlPrefix 和 serverName 这几个参数的ip(或域名)指向nginx服务器。比如这里是192.168.121.130 这里要着重说说”同步单点登出“。 由于CAS 提供的Java客户端会将一些与登陆状态有关的数据记录在本地内存中,因此需要对$CAS_CLIENT_HOME的cas-client-core模块和cas-client-support

AlphaFold证明人工智能可以解决基本的科学问题

本秂侑毒 提交于 2020-12-20 12:32:33
来源:IEEE电气电子工程师 Gif: DeepMind Two examples of protein targets in the free modelling category. 任何人工智能的成功实施都依赖于以正确的方式提出正确的问题。这就是英国人工智能公司DeepMind(Alphabet的子公司)在利用其神经网络解决生物学的重大挑战之一蛋白质折叠(protein-folding)问题时所取得的成就。它的神经网络被称为AlphaFold,能够根据蛋白质的氨基酸序列以前所未有的准确度预测蛋白质的三维结构。 AlphaFold在蛋白质结构预测的第14个临界评估(14th Critical Assessment of protein Structure Prediction,CASP14)中的预测对于大多数蛋白质来说都精确到一个原子的宽度之内。竞争包括盲目地预测蛋白质的结构,这些蛋白质是最近才被实验确定的,还有一些尚待确定。 蛋白质被称为生命的组成部分,由20种不同的氨基酸以不同的组合和序列组成。蛋白质的生物学功能与其三维结构密切相关。因此,对最终折叠形状的了解对于理解特定蛋白质是如何工作的至关重要,例如它们如何与其他生物分子相互作用,如何控制或调整,等等。欧洲生物信息学研究所(European Bioinformatics Institute)荣誉主任Janet M.

架构师之路2017半年精选40篇

此生再无相见时 提交于 2020-12-20 07:00:34
2017上半年精选索引,点击标题阅读。 【特别推荐】 《 架构师之路2016年精选66篇 》 发起一个活动,一起 携手见证 “架构师之路”的 第一篇10w+ ,还差3000阅读,邀您一起转发。 【通用设计与方法论】 《 单KEY业务,数据库水平切分架构实践 》 《 架构设计中常见“反向依赖”与解耦方案 》 《 互联网架构如何实现“高可用” 》 《 互联网架构如何实现“高并发” 》 《 典型数据库架构设计与实践 》 【典型架构实践】 《 计数系统架构设计一次搞定 》 《 session一致性架构设计实践 》 《 TCP接入层的负载均衡、高可用、扩展性架构设计 》 《 配置中心架构设计演进 》 《 跨公网调用的大坑与架构优化 》 《 DNS在架构设计中的巧用 》 《 互联网智能广告系统简易流程与架构 》 【数据库】 《 100亿数据量1万属性10万并发数据库架构设计 》 《 数据库秒级平滑扩容架构方案 》 《 58到家数据库30条军规 》 《 再议数据库军规 》 《 业界难题-“夸库分页”的四种方案 》 《 100亿数据平滑迁移却不影响服务 》 《 MySQL-proxy数据库中间件架构 》 《 用uid分库,那uname上的查询怎么办 》 【一分钟系列】 《 1分钟了解四层/七层反向代理 》 《 1分钟写好连接池 》 《 1分钟理解负载 》 《 1分钟理解领导者-跟随者线程模型 》

java中的各种锁

风格不统一 提交于 2020-12-19 15:11:20
在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁 上面是很多锁的名词,这些分类并不是全是指锁的状态,有的指锁的特性,有的指锁的设计,下面总结的内容是对每个锁的名词进行一定的解释。 公平锁/非公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁。 非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。 有可能,会造成优先级反转或者饥饿现象。 对于Java ReentrantLock 而言,通过构造函数指定该锁是否是公平锁,默认是非公平锁。非公平锁的优点在于吞吐量比公平锁大。 对于 Synchronized 而言,也是一种非公平锁。由于其并不像 ReentrantLock 是通过AQS的来实现线程调度,所以并没有任何办法使其变成公平锁。 可重入锁 可重入锁又名递归锁,是指在同一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁 。说的有点抽象,下面会有一个代码的示例。 对于Java ReentrantLock 而言, 他的名字就可以看出是一个可重入锁,其名字是 Re entrant Lock 重新进入锁。 对于 Synchronized 而言,也是一个可重入锁

java锁介绍

只谈情不闲聊 提交于 2020-12-19 07:58:22
1.乐观锁和悲观锁 乐观锁:读多写少,读数据默认其他线程不会修改该数据,默认不上锁,但是在更新的时候在该期间判断数据有没有更新。(在写时读取版本号,若发生改变,则重新读取--比较--修改) 悲观锁:写少读多,每次读写操作的时候都会上锁。 如Synchronized是悲观锁,AQS框架下的锁(ReenTrantLock)则先尝试cas乐观锁去获取锁,获取不到则会转换为悲观锁 注:AQS框架指提供了一种实现阻塞锁和一系列依赖的FIFO等待队列同步器框架 2.自旋锁 持有锁的线程在很短的时间内释放资源,等待竞争的线程不需要进入阻塞状态,只需要等待一定的时间(自旋)等持有锁的线程释放锁即可立即获取锁,避免用户进行和内河的切换消耗 注:1.如果在设置等待的最大时间内仍然没有释放锁,则会停止自旋进入阻塞状态 2.若持有锁的线程需要长时间占有锁,则不适合用自旋锁 3.公平锁和非公平锁 公平锁:公平锁指的是锁的分配机制是公平的。加锁前检查是否有排队的等待线程,先到先得 非公平锁:按随机、就近原则分配的锁机制称为不公平锁。加锁前不考虑排队等待问题,直接尝试获取,获取不到自动到队尾等待, 注:1.非公平锁性能比公平锁高5到10倍。因为公平锁需要在多核的情况下维护一个队列 2.synchronized是非公平锁,ReentrantLock默认的lock()方法采用的是非公平锁 4.共享锁和独占锁 独占锁

Java并发编程原理

左心房为你撑大大i 提交于 2020-12-18 08:57:05
[相关源码] ( https://github.com/Wasabi1234/Java-Concurrency-Progamming-Tutorial ) 1 Unsafe类的park和unpark public native void park(boolean var1, long var2); public native void unpark(Object var1); park方法用来阻塞一个线程,第一个参数用来指示后面的参数是绝对时间还是相对时间,true表示绝对时间,false表示从此刻开始后的相对时间.调用park的线程就阻塞在此处. unpark用来释放某个线程的阻塞,线程用参数var1表示 举个例子: 2 LockSupport 直接使用Unsafe还是有诸多不便之处,因此lock包提供了一个辅助类LockSupport封装了park和unpark 举个例子: 可以看出,使用 LockSupport 要比直接只用 Unsafe 更加便捷。 此外, LockSupport 还可以用来给线程设置一个Blocker对象,便于调试和检测线程,其原理是使用Unsafe的putObject方法直接设置Thread对象的parkBlocker属性,并在合适的时候读取这个Blocker对象,例子如下: 3 AQS同步器 各种锁ReentrantLock

灵魂拷问,AQS 是个啥???

谁说我不能喝 提交于 2020-12-18 04:27:55
每天早上 七点三十 ,准时推送干货 啥?你连 AQS 是啥都不知道? 如果想要精通 Java 并发的话, AQS 是一定要掌握的。今天跟着阿粉一起搞一搞 基本概念 AQS 是 AbstractQueuedSynchronizer 的简称,翻译成中文就是 抽象队列同步器 ,这三个单词分开来看: Abstract (抽象):也就是说, AQS 是一个抽象类,只实现一些主要的逻辑,有些方法推迟到子类实现 Queued (队列):队列有啥特征呢?先进先出( FIFO )对吧?也就是说, AQS 是用先进先出队列来存储数据的 Synchronizer (同步):即 AQS 实现同步功能 以上概括一下, AQS 是一个用来构建锁和同步器的框架,使用 AQS 能简单而又高效地构造出同步器。 AQS 内部实现 AQS 队列在内部维护了一个 FIFO 的双向链表,如果对数据结构比较熟的话,应该很容易就能想到,在双向链表中,每个节点都有两个指针,分别指向直接前驱节点和直接后继节点。使用双向链表的优点之一,就是从任意一个节点开始都很容易访问它的前驱节点和后继节点。 在 AQS 中,每个 Node 其实就是一个线程封装,当线程在竞争锁失败之后,会封装成 Node 加入到 AQS 队列中;获取锁的线程释放锁之后,会从队列中唤醒一个阻塞的 Node (也就是线程) AQS 使用 volatile 的变量

【并发编程】【JDK源码】J.U.C--AQS (AbstractQueuedSynchronizer)(1/2)

99封情书 提交于 2020-12-18 03:15:46
##J.U.C实现基础 AQS、非阻塞数据结构和原子变量类(java.util.concurrent.atomic包中的类),concurrent包中的基础类都是使用这种模式来实现的。而concurrent包中的高层类又是依赖于这些基础类来实现的。从整体来看,concurrent包的实现示意图如下: Java中的许多可阻塞类,例如ReentrantLock、Semaphore、ReentrantReadWriteLock、CountDownLatch等,都是基于AQS构建的。 注:在jdk 1.8.0_111源码中FutureTask不是基于AQS的,而是基于CAS FutureTask源码注释: /* * Revision notes: This differs from previous versions of this * class that relied on AbstractQueuedSynchronizer, mainly to * avoid surprising users about retaining interrupt status during * cancellation races. Sync control in the current design relies * on a "state" field updated via CAS to

Java并发编程-synchronized

心不动则不痛 提交于 2020-12-18 02:16:48
1、 为什么会用到 synchronized   Java语言的一个高级特性就是支持多线程,线程在操作系统的实现上,可以看成是轻量级的进程,同一进程中的线程都将共享进程的内存空间,所以Java的多线程在共享JVM的内存空间。JVM的内存空间主要分为:程序计数器、虚拟机栈、本地方法栈、堆、方法区和运行时常量池。   在这些内存空间中,我们重点关注栈和堆,这里的栈包括了虚拟机栈和本地方法栈(实际上很多JVM的实现就是两者合二为一)。在JVM中,每个线程有自己的栈内存,其他线程无法访问该栈的内存数据,栈中的数据也仅仅限于基本类型和对象引用。在JVM中,所有的线程共享堆内存,而堆上则不保存基本类型和对象引用,只包含对象。除了重点关注的栈和堆,还有一部分数据存放在方法区,比如类的静态变量,方法区和栈类似,只能存放基本类型和对象引用,不同的是方法区是所有线程共享的。   如上所述,JVM的堆(对象信息)和方法区(静态变量)是所有线程共享的,那么多线程如果访问同一个对象或者静态变量时,就需要进行管控,否则可能出现无法预测的结果。为了协调多线程对数据的共享访问,JVM给每个对象和类都分配了一个锁,同一时刻,只有一个线程可以拥有这个对象或者类的锁。JVM中锁是通过监视器(Monitors)来实现的,监视器的主要功能就是监视一段代码,确保在同一时间只有一个线程在执行。每个监视器都和一个对象关联

Java并发——结合CountDownLatch源码、Semaphore源码及ReentrantLock源码来看AQS原理

烈酒焚心 提交于 2020-12-16 10:31:14
前言:   如果说J.U.C包下的核心是什么?那我想答案只有一个就是AQS。那么AQS是什么呢?接下来让我们一起揭开AQS的神秘面纱 AQS是什么?   AQS是AbstractQueuedSynchronizer的简称。为什么说它是核心呢?是因为它提供了一个基于FIFO的队列和state变量来构建锁和其他同步装置的 基础框架 。下面是其底层的数据结构。 AQS的特点   1、其内使用Node实现FIFO(FirstInFirstOut)队列。可用于构建锁或者其他同步装置的基础框架   2、且利用了一个int类表示状态。在AQS中维护了一个volatile int state,通常表示有线程访问资源的状态,当state>1的时候表示线程重入的数量,主要有三个方法控制:getState(),setState(),CompareAndSetState()。后面的源码分析多用到这几个方法   3、使用方法是继承,子类通过继承并通过实现它的方法管理其状态(acquire和release)的方法操纵状态。   4、同时实现排它锁和共享锁模式。实际上AQS功能主要分为两类:独占(只有一个线程能执行)和共享(多个线程同时执行),它的子类要么使用独占功能要么使用共享功能,而ReentrantLock是通过两个内部类来实现独占和共享 CountDownLatch如何借助AQS实现计数功能?