当前位置: 首页 > news >正文

网站开发费用包括美工费吗岳阳网站建设哪里便宜

网站开发费用包括美工费吗,岳阳网站建设哪里便宜,深圳品牌策划公司排行,江门自助建站模板何谓悲观锁与乐观锁悲观锁乐观锁两种锁的使用场景乐观锁常见的两种实现方式1. 版本号机制2. CAS算法乐观锁的缺点1 ABA 问题2 循环时间长开销大3 只能保证一个共享变量的原子操作CAS与synchronized的使用情景何谓悲观锁与乐观锁乐观锁对应于生活中乐观的人总是想着事情往好的方…何谓悲观锁与乐观锁悲观锁乐观锁两种锁的使用场景乐观锁常见的两种实现方式1. 版本号机制2. CAS算法乐观锁的缺点1 ABA 问题2 循环时间长开销大3 只能保证一个共享变量的原子操作CAS与synchronized的使用情景何谓悲观锁与乐观锁乐观锁对应于生活中乐观的人总是想着事情往好的方向发展悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点不能不以场景而定说一种人好于另外一种人。悲观锁总是假设最坏的情况每次去拿数据的时候都认为别人会修改所以每次在拿数据的时候都会上锁这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用其它线程阻塞用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制比如行锁表锁等读锁写锁等都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。乐观锁总是假设最好的情况每次去拿数据的时候都认为别人不会修改所以不会上锁但是在更新的时候会判断一下在此期间别人有没有去更新这个数据可以使用版本号机制和CAS算法实现。乐观锁适用于多读的应用类型这样可以提高吞吐量像数据库提供的类似于write_condition机制其实都是提供的乐观锁。在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS实现的。两种锁的使用场景从上面对两种锁的介绍我们知道两种锁各有优缺点不可认为一种好于另一种像乐观锁适用于写比较少的情况下(多读场景)即冲突真的很少发生的时候这样可以省去了锁的开销加大了系统的整个吞吐量。但如果是多写的情况一般会经常产生冲突这就会导致上层应用会不断的进行retry这样反倒是降低了性能所以一般多写的场景下用悲观锁就比较合适。乐观锁常见的两种实现方式乐观锁一般会使用版本号机制或CAS算法实现。1. 版本号机制一般是在数据表中加上一个数据版本号version字段表示数据被修改的次数当数据被修改时version值会加一。当线程A要更新数据值时在读取数据的同时也会读取version值在提交更新时若刚才读取到的version值为当前数据库中的version值相等时才更新否则重试更新操作直到更新成功。举一个简单的例子 假设数据库中帐户信息表中有一个 version 字段当前值为 1 而当前帐户余额字段( balance )为 $100 。操作员 A 此时将其读出( version1 )并从其帐户余额中扣除 $50( $100-$50 )。在操作员 A 操作的过程中操作员B 也读入此用户信息( version1 )并从其帐户余额中扣除 $20 ( $100-$20 )。操作员 A 完成了修改工作将数据版本号加一( version2 )连同帐户扣除后余额( balance$50 )提交至数据库更新此时由于提交数据版本大于数据库记录当前版本数据被更新数据库记录 version 更新为 2 。操作员 B 完成了操作也将版本号加一( version2 )试图向数据库提交数据( balance$80 )但此时比对数据库记录版本时发现操作员 B 提交的数据版本号为 2 数据库记录当前版本也为 2 不满足 “ 提交版本必须大于记录当前版本才能执行更新 “ 的乐观锁策略因此操作员 B 的提交被驳回。这样就避免了操作员 B 用基于 version1 的旧数据修改的结果覆盖操作员A 的操作结果的可能。2. CAS算法即compare and swap(比较与交换)是一种有名的无锁算法。无锁编程即不使用锁的情况下实现多线程之间的变量同步也就是在没有线程被阻塞的情况下实现变量的同步所以也叫非阻塞同步(Non-blocking Synchronization)。CAS算法涉及到三个操作数需要读写的内存值 V进行比较的值 A拟写入的新值 B当且仅当 V 的值等于 A时CAS通过原子方式用新值B来更新V的值否则不会执行任何操作(比较和替换是一个原子操作)。一般情况下是一个自旋操作即不断的重试。关于自旋锁大家可以看一下这篇文章非常不错《 面试必备之深入理解自旋锁》乐观锁的缺点ABA 问题是乐观锁一个常见的问题1 ABA 问题如果一个变量V初次读取的时候是A值并且在准备赋值的时候检查到它仍然是A值那我们就能说明它的值没有被其他线程修改过了吗很明显是不能的因为在这段时间它的值可能被改为其他值然后又改回A那CAS操作就会误认为它从来没有被修改过。这个问题被称为CAS操作的 ABA问题。JDK 1.5 以后的 AtomicStampedReference 类就提供了此种能力其中的 compareAndSet 方法就是首先检查当前引用是否等于预期引用并且当前标志是否等于预期标志如果全部相等则以原子方式将该引用和该标志的值设置为给定的更新值。2 循环时间长开销大自旋CAS(也就是不成功就一直循环执行直到成功)如果长时间不成功会给CPU带来非常大的执行开销。 如果JVM能支持处理器提供的pause指令那么效率会有一定的提升pause指令有两个作用第一它可以延迟流水线执行指令(de-pipeline),使CPU不会消耗过多的执行资源延迟的时间取决于具体实现的版本在一些处理器上延迟时间是零。第二它可以避免在退出循环的时候因内存顺序冲突(memory order violation)而引起CPU流水线被清空(CPU pipeline flush)从而提高CPU的执行效率。3 只能保证一个共享变量的原子操作CAS 只对单个共享变量有效当操作涉及跨多个共享变量时 CAS 无效。但是从 JDK 1.5开始提供了AtomicReference类来保证引用对象之间的原子性你可以把多个变量放在一个对象里来进行 CAS 操作.所以我们可以使用锁或者利用AtomicReference类把多个共享变量合并成一个共享变量来操作。CAS与synchronized的使用情景简单的来说CAS适用于写比较少的情况下(多读场景冲突一般较少)synchronized适用于写比较多的情况下(多写场景冲突一般较多)对于资源竞争较少(线程冲突较轻)的情况使用synchronized同步锁进行线程阻塞和唤醒切换以及用户态内核态间的切换操作额外浪费消耗cpu资源而CAS基于硬件实现不需要进入内核不需要切换线程操作自旋几率较少因此可以获得更高的性能。对于资源竞争严重(线程冲突严重)的情况CAS自旋的概率会比较大从而浪费更多的CPU资源效率低于synchronized。补充 Java并发编程这个领域中synchronized关键字一直都是元老级的角色很久之前很多人都会称它为 “重量级锁” 。但是在JavaSE 1.6之后进行了主要包括为了减少获得锁和释放锁带来的性能消耗而引入的 偏向锁 和 轻量级锁 以及其它各种优化之后变得在某些情况下并不是那么重了。synchronized的底层实现主要依靠 Lock-Free 的队列基本思路是 自旋后阻塞竞争切换后继续竞争锁稍微牺牲了公平性但获得了高吞吐量。在线程冲突较少的情况下可以获得和CAS类似的性能而线程冲突严重的情况下性能远高于CAS。
http://www.pierceye.com/news/608172/

相关文章:

  • 做网站的个人总结论坛内网站怎么建设
  • 那里有个人做网站的如何建设网页制作的网站
  • 佛山网站建设玲念建站会议管理系统
  • 网站开发需要什么资质天马行空网站建设
  • 猎聘网网站建设目标怎么做网站上的模拟动画
  • 南通制作企业网站福州做网站设计
  • 上什么网站做会计教育wordpress cookies
  • 山东网站备案号四川省建筑信息网
  • 网站开发可以用哪些语言中国十二冶金建设有限公司网站
  • 中药网站模板襄阳seo优化服务
  • 做爰片免费观看网站会展企业网站建设方案
  • 国内空间没备案可以打开网站吗dw做网站 怎么做背景图片
  • host绑定网站国外网站风格
  • 安顺建设局网站wordpress 分页
  • 重庆做网站个人外网登录不了WordPress
  • 医药平台网站建设网站排名做不上去
  • 网站关键词优化培训怎样使用wordpress
  • wordpress多站做网站空间百度云和阿里云区别
  • 衡水企业网站制作公司3000块钱在朋友圈投放广告
  • 做网站没有公网北京网页制作教程
  • 运城哪家做网站的公司好小商铺装修
  • 如何访问win7下做的网站时间轴网站模板
  • html5网站制作软件做app找哪个网站吗
  • 网站名称怎么备案外贸商城网站模板
  • 网页设计网站网站建设课程设计客户关系管理流程图
  • 网站开发遇到的难题品牌策划公司有哪些
  • 网站如何做视频链接网络服务器可提供的常见服务
  • 做二手钢结构网站有哪些网站建设开发ppt
  • 做网站分什么软件免费备案网站空间
  • 网站建设公司大全如何制作网站视频的软件