CAS

CAS Authentication Library for CodeIgniter

て烟熏妆下的殇ゞ 提交于 2020-01-30 08:33:27
问题 I am trying to implement CAS authentication in a CodeIgniter application though I cannot find if there are any libraries currently set up for it. I am managing by just including the class and adding in a few dirty fixes though if anyone knows of a proper library I think it would be a cleaner solution. I have been looking through a range of posts on here as well as all over Google but seem to be coming up short on what I need. The only place of any relevance is a post on VCU Libraries but that

cas单点登录打包时下载慢!

放肆的年华 提交于 2020-01-29 16:17:31
环境:win10 百度网盘下载 版本: cas-overlay-template-5.3      提取码 d1b6 添加阿里的到pom.xml 注意添加到第一列 <!--阿里云仓库--> <repository> <id>aliyunmaven</id> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </repository> pom.xml 文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd "> <modelVersion>4.0.0</modelVersion> <groupId>org.apereo.cas</groupId> <artifactId>cas-overlay</artifactId> <packaging>war</packaging>

走进原子性

二次信任 提交于 2020-01-29 13:48:27
走进原子性 问题:线程之间的协作 标准解决方法:上锁 实现一个计数器和互斥锁 locking的问题 硬件同步的早期 Compare and Swap(CAS) 用CAS来实现计数器 lock-free和wait-free算法 原子变量类 细颗粒度意味着轻量级 十五年前,多核处理器是特别的系统,需要花费成百上千的美元。今天,多核处理器系统又便宜又丰富,几乎每一个主要的微处理器都对并发有内部支持。 为了利用好多核的优势,软件也架构在多线程上。但是,仅仅将一个工作简单地划分为几个线程并不能发挥出硬件的优势-----你必须要确保你的线程大部分时间是在工作,而不是在等待工作,或者是在共享数据结构上等锁。 问题:线程之间的协作 几乎没有task能够真正地并发运行,不需要线程之间的协作。想象一个线程池,那里tasks是互相独立地运行的。假如一个线程池要为一个queue工作,那么为queue加入或者删除元素都必须是线程安全的,那意味着在head,tail,或者内部node的引用之间的协作。正是这样的协作导致了所有的问题。 标准解决方法:上锁 对于共享字段的协作获取的传统做法是通过synchronize,它确保所有对共享字段的获取都是拿着锁的状态。使用synchronize,你可以确保不管哪个保护着一些变量的线程取得锁,它都会对这些变量有着独享,而对这些变量的改变又会变成可见的

java锁优化

为君一笑 提交于 2020-01-28 21:18:53
一、锁优化的思路和方法 锁优化是指:在多线程的并发中当用到锁时,尽可能让性能有所提高。一般并发中用到锁,就是阻塞的并发,前面讲到一般并发级别分为阻塞的和非阻塞的(非阻塞的包含:无障碍的,无等待的,无锁的等等),一旦用到锁,就是阻塞的,也就是一般最糟糕的并发,因此锁优化就是在堵塞的情况下去提高性能;所以所锁的优化就是让性能尽可能提高,不管怎么提高,堵塞的也没有无锁的并发底。让锁定的障碍降到最低,锁优化并不是说就能解决锁堵塞造成的性能问题。这是做不到的。 方法如下:  减少锁持有时间  减小锁粒度  锁分离  锁粗化  锁消除 二、减少锁持有时间 举例: public synchronized void syncMethod(){ othercode1(); mutextMethod(); othercode2(); } 使用这个锁会造成其他线程进行等待,因此让锁的的持有时间减少和锁的范围,锁的零界点就会降低,其他线程就会很快获取锁,尽可能减少了冲突时间。 改进优化如下: public void syncMethod2(){ othercode1(); synchronized(this){ mutextMethod(); } othercode2(); } 三、减小锁粒度  将大对象,拆成小对象,好处是:大大增加并行度,降低锁竞争(同时偏向锁,轻量级锁成功率提高) 

java中常用的锁机制

*爱你&永不变心* 提交于 2020-01-28 20:44:38
基础知识 基础知识之一:锁的类型 锁就那么几个,只是根据特性,分为不同的类型 锁的概念 在计算机科学中,锁(lock)或互斥(mutex)是一种同步机制,用于在有许多执行线程的环境中强制对资源的访问限制。锁旨在强制实施互斥排他、并发控制策略。 锁通常需要硬件支持才能有效实施。这种支持通常采取一个或多个原子指令的形式,如"test-and-set", "fetch-and-add" or "compare-and-swap"”。这些指令允许单个进程测试锁是否空闲,如果空闲,则通过单个原子操作获取锁。 锁的三个概念 1、锁开销 lock overhead 锁占用内存空间、 cpu初始化和销毁锁、获取和释放锁的时间。程序使用的锁越多,相应的锁开销越大 2、锁竞争 lock contention 一个进程或线程试图获取另一个进程或线程持有的锁,就会发生锁竞争。锁粒度越小,发生锁竞争的可能性就越小 3、死锁 deadlock 至少两个任务中的每一个都等待另一个任务持有的锁的情况锁粒度是衡量锁保护的数据量大小,通常选择粗粒度的锁(锁的数量少,每个锁保护大量的数据),在当单进程访问受保护的数据时锁开销小,但是当多个进程同时访问时性能很差。因为增大了锁的竞争。相反,使用细粒度的锁(锁数量多,每个锁保护少量的数据)增加了锁的开销但是减少了锁竞争。例如数据库中,锁的粒度有表锁、页锁、行锁、字段锁

深入理解CAS算法原理

懵懂的女人 提交于 2020-01-28 12:46:27
1、什么是CAS? CAS:Compare and Swap,即比较再交换。 jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronouse同步锁的一种乐观锁。JDK 5之前Java语言是靠synchronized关键字保证同步的,这是一种独占锁,也是是悲观锁。 2、CAS算法理解 对CAS的理解,CAS是一种无锁算法,CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。 CAS比较与交换的伪代码可以表示为: do{ 备份旧数据; 基于旧数据构造新数据; }while(!CAS( 内存地址,备份的旧数据,新数据 )) https://upload-images.jianshu.io/upload_images/5954965-b88918b03518f254?imageMogr2/auto-orient/strip|imageView2/2/w/320/format/webp 注:t1,t2线程是同时更新同一变量56的值 因为t1和t2线程都同时去访问同一变量56,所以他们会把主内存的值完全拷贝一份到自己的工作内存空间,所以t1和t2线程的预期值都为56。 假设t1在与t2线程竞争中线程t1能去更新变量的值,而其他线程都失败。

java并发变成及juc包的应用

╄→尐↘猪︶ㄣ 提交于 2020-01-28 03:51:22
多线程: windows操作系统是多任务操作系统,它以进程为单位,一个进程是一个包含有自身地址的程序,每个正在独立执行的程序都称为进程,进程是系统进行资源分配和调用的独立单位,每个进程有自己的内存空间和系统资源。系统可以分配给每个进程一段有限的使用CPU时间,CPU在这个时间片中执行某个进程,然后下一个时间片又跳到另一个进程中去执行,由于CPU转换较快,所以使的每个进程好像同时进行,多核CPU的多核同时运行,但是进程数远远大于核数,所以还是要依靠切换进程来做。一个线程则是进程中的执行流程,一个进程中可以同时包括多个线程,每个线程也可以得到一小段程序的执行时间,这样一个进程就可以具有多个并发执行的线程,在单线程中,程序的代码按照调用顺序依次往下执行,如果需要一个进程同时完成多段代码的操作,就需要产生多线程(多条执行路径)。多线程可以提高应用程序的使用率,为了有更高的几率抢到CPU的执行权,但我们不能保证哪一个线程能够在哪一个时刻抢到,所以线程的执行有随机性。在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题。 线程的两种调度模型:平均分配每个线程占用CPU的时间片,上面说的就是这种,第二种就是抢占式调度模型:优先让优先级高的线程使用CPU,如果线程的优先级相同,会随机选一个,优先级高仅仅表示线程获取的cpu时间片的几率相对对多些

线程安全与锁优化

你说的曾经没有我的故事 提交于 2020-01-27 16:42:25
1.线程安全: 当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。 2.Java语言中的线程安全  根据线程安全的安全程度由强到弱来排序,我们可以把Java语言中各种操作共享的数据分为以下5类:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。    1)不可变: 不可变的对象一定是线程安全的;Java语言中,如果共享数据是一个基本数据类型,那么只要在定义时使用final关键字修饰它就可以保证它是不可变的。如果共享数据是一个对象,那就需要保证对象的行为不会对其状态产生任何影响,即把对象中带有状态的变量都声明为final,这样在构造函数结束之后,它就是不可变的。    2)绝对线程安全: 就是一个类在任何运行时环境下,调用者都不需要任何额外的同步措施。在Java API中标注自己是线程安全的类,大多数都不是绝对线程安全的。    3)相对线程安全: 就是我们通常所讲的线程安全,它需要保证对这个对象单独的操作是线程安全的,我们在调用时不需要做额外的保障措施。但对于一些特定顺序的连续调用,就可能需要在调用端使用额外的同步手段来保证调用的正确性。    4)线程兼容: 指对象本身并不是线程安全的

乐观锁与悲观锁

谁说胖子不能爱 提交于 2020-01-25 03:00:43
悲观锁:锁住记录,每次访问需要加锁; 乐观锁:使用CAS机制,不加锁,自旋访问; 高并发情况下,乐观锁自旋开销很大,影响性能。 来源: CSDN 作者: 喝酒打脑阔 链接: https://blog.csdn.net/weixin_44235601/article/details/103990236

java - CAS及CAS底层原理

被刻印的时光 ゝ 提交于 2020-01-24 00:02:12
CAS是什么?   CAS的全称为Compare-And-Swap它是一条CPU并发原语,也就是在CPU硬件层面上来说比较并且判断是否设置新值这段操作是原子性的,不会被其他线程所打断。在JAVA并发包java.util.concurrent.atomic下底层所采用的就是利用CAS机制来避免进行并发计算时导致数据错乱问题。 atomic底层实现 java.util.concurrent.atomic下各个类主要使用UnSafe类来进行Compare-And-Swap操作。 Unsafe是Java中一个底层类,包含了很多基础的操作,比如数组操作、对象操作、内存操作、CAS操作、线程(park)操作、栅栏(Fence)操作,JUC包、一些三方框架都使用Unsafe类来保证并发安全。Unsafe类在jdk 源码的多个类中用到,这个类的提供了一些绕开JVM的更底层功能,基于它的实现可以提高效率。但是,它是一把双刃剑:正如它的名字所预示的那样,它是Unsafe的,它所分配的内存需要手动free(不被GC回收)。Unsafe类,提供了JNI某些功能的简单替代:确保高效性的同时,使事情变得更简单。 如果需要自定义原子引用则可以通过类AtomicReference通过泛型设置,本篇不做过多介绍。 接下来以AtomicInteger类为切入点来看看Atomic是如何利用Compare-And