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

云南企业网站建设服务器iis搭建网站

云南企业网站建设,服务器iis搭建网站,软件开放和网站开发,重庆网站建设及推广公司多线程-进阶 1. 锁的策略 1.1 乐观锁悲观锁 乐观锁 预计在线程中数据大概率不会被其他线程拿去修改 对于加锁所作的准备较少。只有当修改的操作真正发生了#xff0c;才会进行加锁操作 所以乐观锁适用于多读少写的情况#xff0c;可以降低加锁频率#xff0c;提升效…多线程-进阶 1. 锁的策略 1.1 乐观锁悲观锁 乐观锁 预计在线程中数据大概率不会被其他线程拿去修改 对于加锁所作的准备较少。只有当修改的操作真正发生了才会进行加锁操作 所以乐观锁适用于多读少写的情况可以降低加锁频率提升效率。 悲观锁 预计在线程中数据大概率会被其他线程拿走做修改操作加锁前的准备工作比较多 所以悲观锁适用于对于线程安全要求高的场景。 1.2 轻量级锁重量级锁 轻量级锁 对应于乐观锁加锁前的操作占用的资源少造成的阻塞情况少较少进行内核态和用户态的切换较少进程之间的调度 重量级锁 对应于悲观锁加锁前的准备工作多容易造成线程阻塞大量内核态和用户态的切换易引发进程之间的调度 乐观和悲观是对于未加锁结果的一种猜想 重量轻量是对于加锁后资源消耗的一种评价 从这个角度说这两组概念都是在描述加锁的工作对于资源的消耗。乐观就是消耗的资源较少悲观反之。 1.3 自旋锁挂起等待锁 自旋锁 重复、快速地进行锁的获取称为自旋“ 会增大cpu的消耗可能会造成“忙等” 适用于乐观、轻量的策略虽然一直不停地在获取锁但是过不了多久就能够真正获取到锁 伪代码 while(抢锁失败) {加锁... }优点 在锁竞争平缓的情况下能够降低资源消耗加快运行速度避免线程之间因为简单的任务而阻塞。 其他线程一旦把锁释放就会第一时间拿到锁 缺点 如果遇到锁竞争激烈的情况会有其他线程竞争不到锁的情况。竞争不到锁但是还会一直进行获取锁造成cpu的资源浪费 挂起等待锁 遇到锁竞争的情况就挂起等待 适用于锁竞争激烈的情况 与悲观、重量相对应 伪代码 while(抢锁失败) {wait(); }优点 避免了cpu资源浪费 缺点 不能第一时间抢到锁什么时候能加锁由系统决定 1.4 普通互斥锁读写锁 普通互斥锁 类似于synchronized在一个线程对于同一个对象进行加锁的时候另一个线程不能对于这个对象的锁进行获取 读写锁 读锁 给读操作加锁读的过程中其他线程只能再读不能写 读的操作并没有线程安全问题但是只局限于读如果读的过程中把正在读取的值拿走进行修改那么就会产生读到“脏值”的情况。 写锁 给写操作加锁在一个线程写的时候其他线程不能读也不能写 写就是修改修改就会有线程安全问题如果在修改的过程中读就可能会读到“脏值”如果在修改的过程中继续修改就可能会引起数据的混乱。 1.5 公平锁非公平锁 公平锁 基于前人发明的、前人规定的规则“先来后到”就是公平“先来后到”一个线程拥有锁的时间越长那就越应该下一个获取到锁有效避免了线程饿死 非公平锁 在释放锁之后随机等概率竞争锁的情况mutex锁就是非公平锁synchronized是封装mutex的锁故而也是非公平锁 这里的“公平”和“非公平”只是基于前人发明的角度上其实在“等概率竞争锁”的情况下也是一种“公平“。 1.6 可重入锁不可重入锁 可重入锁 可以重复加锁 synchronized就是可重入锁 伪代码: lock();// 第一次加锁之后继续加锁 lock();// 第二次加锁不可重入锁 不可重复加锁c中的mutex就是不可重入锁不可重入锁在进行重复加锁的时候会出现死锁现象 结论 乐观锁-轻量级锁-自旋锁都是对应的 悲观锁-重量级锁-挂起等待锁是对应的 乐观认为自己的家不会被偷那就在家被偷或者被贼盯上的时候再去给门上锁 悲观认为自己的家已经被贼盯上了一直上着锁 轻量级锁只给家门上一个容易打开的锁开锁的时候消耗自己的时间精力也会较少乐观地认为贼不会偷有锁的家 重量级锁给家门上一个不容易打开的防盗锁开锁的时候消耗自己的时间精力会增加悲观地认为一直有贼盯上我的房子 自旋锁 乐观地认为没有多少贼盯上了自己的家所以每天都去看看自己的家有没有被偷优点是家一被偷就能够知道就能立马上锁缺点是费时费力 挂起等待锁悲观地认为有很多贼已经盯上了自己的家所以上一把不容易打开的锁当有人敲门的时候再去检查是谁来如果是贼那就不开门让锁挂起等待自己继续在家里玩游戏。好处是减少了自己的任务量可以有效防止多个贼同时顶上自己家的情况缺点是这把锁自己也不容易打开 普通互斥锁 2. CAS 乐观锁的常用实现算法是CAS算法全称是CompareAndSwap比较和交换这个也是cpu中存在的一条cas指令。 伪代码 boolen cas(address, expectedValue, swapValue) {if (address expectedValue) {address swapValue;return true;}return false; }address表示内存expectedValue和swapValue是两个寄存器。 如果内存中的值与交换前所期望的值相等那就与准备交换的值进行交换说是交换其实就是赋值。 expectedValue就是内存中值的”旧值“通过与这个”旧值“进行比较就能够发现此值在修改前是否进行了改动防止读到”脏值“。 3. synchronized 原理 3.1 锁的升级 synchronized锁是一把自适应锁当一个线程执行到synchronized的时候如果这个线程还未加上锁那么synchronized就会经理以下过程 偏向锁阶段 核心思想就是”懒汉模式”非必要不加锁升级成轻量级锁就是必要的时候。 在这个阶段并不会真正地加上锁但是会对于有加锁可能性的对象在对象头进行标记标记这个对象属于哪个线程如果后续没有线程竞争这把锁那就不再真正的进行加锁就省下了加锁的消耗如果一旦发生线程安全问题立马升级为轻量级锁 感觉有点像占着茅坑不拉屎一旦有人来了就蹲下拉屎没人来也就占着。学校的占座不就是这样吗 轻量级锁阶段 随着线程之间少量的锁竞争偏向锁状态被消除并不是解锁了进入轻量级锁阶段这个阶段由自旋锁进行实现 synchronized内部会统计当前这个锁对象有多少个线程想要竞争如果数量多那么还会升级为重量级锁 因为锁的竞争大的话对于自旋锁来说大量的线程都在自旋这样不能提高效率反而会带来更多的cpu消耗。 重量级锁阶段 随着线程之间大量的锁竞争轻量级锁升级为重量级锁此时不会对于锁竞争发生自旋而是进入阻塞等待状态就会有大部分的线程让出cpu当目前占有锁的线程执行完毕以后就会释放锁剩余线程等概率竞争锁 3.2 锁的工作原理 synchronized锁是: 对于以下锁的状态自适应 乐观、悲观锁自旋、挂起等待锁轻量级、重量级 不是读写锁非公平锁可重入锁 系统原生mutex锁是 悲观锁重量级锁挂起等待锁互斥锁非公平锁不可重入锁 4. 其他的优化操作 4.1 锁消除 当编译器发现加锁的这一部分代码中并未涉及变量修改的部分那么就会自动将锁去掉。 使用线程安全的StringBuffer举个例子: StringBuffer sb new StringBuffer(); sb.append(a); sb.append(b); sb.append(c); sb.append(d);这段代码中虽然每个append 都有加锁解锁的操作但是jvm编译器都发现这段代码并没有真正的线程安全问题所以就不会进行加锁和解锁避免了资源的无谓消耗。 4.2 锁粗化 与锁粗化关系密切的一个重要概念是锁的粒度。 锁的粒度就像吃的牛肉粒一样每次加一个锁就是一个牛肉粒有两种策略吃: 每次剥开一个牛肉粒就吃一个每次剥开不吃等到攒成一个大牛肉粒再吃 两种伪代码分别对应这两种情况 for() {synchronized(locker) {// TODO} }将锁粗化 synchronized(locker) {for() {// TODO} }4. 死锁 4.1 死锁的成因有4个 循环等待 当锁A唤醒需要锁B先释放锁B唤醒需要锁A先释放就构成了循环等待。 请求和保持 当一个线程获取新锁的同时它会继续对于当前已有的锁进行占有。 互斥使用 资源被一个线程占有时其他的线程不能同时使用。 不可抢占 资源被一个线程占有时其他线程不能抢占使用只能等待当前占有者主动释放。 其中3和4是锁的特性无法改变但是1和2可以通过代码结构进行破坏。 比较著名的是“哲学家就餐问题” 当这5名哲学家都需要吃饭的时候餐桌上拥有的筷子数量肯定是不够用的但是如果给哲学家加上拿筷子的顺序那么就只会有一名哲学家在“阻塞等待”。 比如规定每名哲学家只能先拿起编号小的筷子那么就是0号老铁先吃 1号老铁进行阻塞等待等到0号老铁吃完以后再先拿起编号小的1号筷子2号筷子吃 234老铁同理。 4.2 破坏死锁 就是调整代码结构破除循环等待这个条件。
http://www.yutouwan.com/news/273092/

相关文章:

  • 网站运营与管理的对策建议网站主页设计布局
  • 福州企业网站维护价格低建设公司营销网站
  • 做推文网站甜蜜蜜西瓜视频免费观看
  • 特色的武进网站建设asp网站怎么做301定向
  • 静态网站生成器怎样做产品网络推广的方法
  • 免备案php网站空间合肥定制网站建设
  • 大尺度做爰床视频网站中国免费素材网
  • 国外网站建设品牌桂林同城网站
  • 英文网站建设easy简单大方网站
  • 网站开发合同样本织梦模板如何安装
  • 小程序网站开发机构凤阳做网站
  • 南阳做网站优化哪家好污水处理厂网站建设
  • 网站结构图怎么做网站开发交付验收文档
  • 望京做网站的公司哪家好wordpress录音功能
  • 个人或主题网站建设实验体会cp网站开发搭建网站多少钱一套
  • 网站建设课程下载wordpress安装包
  • 网站建设收费标准报价怎么样在百度做网站
  • win2003 iis做网站网站网页设计在哪找
  • 网站建设公司发展前景分栏型网站
  • 北京新机场建设指挥部网站惠州小程序推广
  • 河南浪博网站开发dede网站版权信息标签
  • 代制作网站wordpress++群晖
  • 网站设计培训学校有哪些百度技术培训中心
  • 网站制作流程分为哪三步广东地区建网站的公司
  • 西安网站建设的费用代理网名大全
  • 深圳网站建设服务器公司ml免费域名注册
  • win7用本地文件做网站模板黑彩网站建设运营
  • 百度云建网站做视频网站需要什么架构
  • 网站开发兴趣组网站上的代码网页怎么做的
  • php网站开发实例教程 课件做网站域名怎么选有利于seo