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

什么是cms系统百度seo推广是什么

什么是cms系统,百度seo推广是什么,外贸流程全步骤流程图,建设企业网站下载转载自 再有人问你volatile是什么#xff0c;把这篇文章也发给他 在上一篇文章中#xff0c;我们围绕volatile关键字做了很多阐述#xff0c;主要介绍了volatile的用法、原理以及特性。在上一篇文章中#xff0c;我提到过#xff1a;volatile只能保证可见性和有序性把这篇文章也发给他 在上一篇文章中我们围绕volatile关键字做了很多阐述主要介绍了volatile的用法、原理以及特性。在上一篇文章中我提到过volatile只能保证可见性和有序性无法保证原子性。关于这部分内容有读者阅读之后表示还是不是很理解所以我再单独写一篇文章深入分析一下。阅读本文之前请先阅读上一篇文章再有人问你volatile是什么就把这篇文章发给他 volatile与有序性 在上一篇文章中我们提到过volatile一个强大的功能那就是他可以禁止指令重排优化。通过禁止指令重排优化就可以保证代码程序会严格按照代码的先后顺序执行。那么volatile又是如何禁止指令重排的呢 先给出结论volatile是通过内存屏障来来禁止指令重排的。 内存屏障Memory Barrier是一类同步屏障指令是CPU或编译器在对内存随机访问的操作中的一个同步点使得此点之前的所有读写操作都执行后才可以开始执行此点之后的操作。下表描述了和volatile有关的指令重排禁止行为 从上表我们可以看出 当第二个操作是volatile写时不管第一个操作是什么都不能重排序。这个规则确保volatile写之前的操作不会被编译器重排序到volatile写之后。 当第一个操作是volatile读时不管第二个操作是什么都不能重排序。这个规则确保volatile读之后的操作不会被编译器重排序到volatile读之前。 当第一个操作是volatile写第二个操作是volatile读时不能重排序。 具体实现方式是在编译期生成字节码时会在指令序列中增加内存屏障来保证下面是基于保守策略的JMM内存屏障插入策略 在每个volatile写操作的前面插入一个StoreStore屏障。 对于这样的语句Store1; StoreLoad; Store2在Store2及后续写入操作执行前保证Store1的写入操作对其它处理器可见。 在每个volatile写操作的后面插入一个StoreLoad屏障。 对于这样的语句Store1; StoreLoad; Load2在Load2及后续所有读取操作执行前保证Store1的写入对所有处理器可见。 在每个volatile读操作的后面插入一个LoadLoad屏障。 对于这样的语句Load1;LoadLoad; Load2在Load2及后续读取操作要读取的数据被访问前保证Load1要读取的数据被读取完毕。 在每个volatile读操作的后面插入一个LoadStore屏障。 对于这样的语句Load1; LoadStore; Store2在Store2及后续写入操作被刷出前保证Load1要读取的数据被读取完毕。 所以volatile通过在volatile变量的操作前后插入内存屏障的方式来禁止指令重排进而保证多线程情况下对共享变量的有序性。 volatile与可见性 在上一篇文章中我们提到过Java中的volatile关键字提供了一个功能那就是被其修饰的变量在被修改后可以立即同步到主内存被其修饰的变量在每次是用之前都从主内存刷新。 其实volatile对于可见性的实现内存屏障也起着至关重要的作用。因为内存屏障相当于一个数据同步点他要保证在这个同步点之后的读写操作必须在这个点之前的读写操作都执行完之后才可以执行。并且在遇到内存屏障的时候缓存数据会和主存进行同步或者把缓存数据写入主存、或者从主存把数据读取到缓存。 这里稍微拓展一下我们在内存模型是怎么解决缓存一致性问题的一文中介绍过缓存一致性协议同时也提到过内存一致性模型的实现可以通过缓存一致性协议来实现。同时留了一个问题已经有了缓存一致性协议为什么还需要volatile 这个问题的答案可以从多个方面来回答 1、并不是所有的硬件架构都提供了相同的一致性保证Java作为一门跨平台语言JVM需要提供一个统一的语义。 2、操作系统中的缓存和JVM中线程的本地内存并不是一回事通常我们可以认为MESI可以解决缓存层面的可见性问题。使用volatile关键字可以解决JVM层面的可见性问题。 3、缓存可见性问题的延伸由于传统的MESI协议的执行成本比较大。所以CPU通过Store Buffer和Invalidate Queue组件来解决但是由于这两个组件的引入也导致缓存和主存之间的通信并不是实时的。也就是说缓存一致性模型只能保证缓存变更可以保证其他缓存也跟着改变但是不能保证立刻、马上执行。 其实在计算机内存模型中也是使用内存屏障来解决缓存的可见性问题的再次强调缓存可见性和并发编程中的可见性可以互相类比但是他们并不是一回事儿。 写内存屏障Store Memory Barrier可以促使处理器将当前store buffer存储缓存的值写回主存。读内存屏障Load Memory Barrier可以促使处理器处理invalidate queue失效队列。进而避免由于Store Buffer和Invalidate Queue的非实时性带来的问题。 所以内存屏障也是保证可见性的重要手段操作系统通过内存屏障保证缓存间的可见性JVM通过给volatile变量加入内存屏障保证线程之间的可见性。 内存屏障 再来总结一下Java中的内存屏障用于控制特定条件下的重排序和内存可见性问题。Java编译器也会根据内存屏障的规则禁止重排序。 volatile与原子性 在以前的文章中我们介绍synchronized的时候提到过为了保证原子性需要通过字节码指令monitorenter和monitorexit但是volatile和这两个指令之间是没有任何关系的。volatile是不能保证原子性的。 网上有很多文章拿i的例子说明volatile不能保证原子性然后进行各种分析有的说由于引入内存屏障导致无法保证原子性有的说一段i代码在编译后字节码为 10: getfield      #2                  // Field i:I 14: iconst_1 15: iadd 16: putfield      #2                  // Field i:I在不考虑内存屏障的情况下一个i指令也包含了四个步骤。 这些分析只是说明了i本身并不是一个原子操作即使使用volatile修饰i也无法保证他是一个原子操作。并不能解释为什么volatile为啥不能保证原子性。 要我说由于CPU按照时间片来进行线程调度的只要是包含多个步骤的操作的执行天然就是无法保证原子性的。因为这种线程执行又不像数据库一样可以回滚。如果一个线程要执行的步骤有5步执行完3步就失去了CPU了失去后就可能再也不会被调度这怎么可能保证原子性呢。 为什么synchronized可以保证原子性 因为被synchronized修饰的代码片段在进入之前加了锁只要他没执行完其他线程是无法获得锁执行这段代码片段的就可以保证他内部的代码可以全部被执行。进而保证原子性。 但是synchronized对原子性保证也不绝对如果真要较真的话一旦代码运行异常也没办法回滚。所以呢在并发编程中原子性的定义不应该和事务中的原子性一样。他应该定义为一段代码或者一个变量的操作在没有执行完之前不能被其他线程执行。 那么为什么volatile不能保证原子性呢因为他不是锁他没做任何可以保证原子性的处理。当然就不能保证原子性了。 总结 本文在上一篇文章的基础上再次介绍了volatile和原子性、有序性以及可见性之间的关系。有序性和可见性是通过内存屏障实现的。而volatile是无法保证原子性的。
http://www.yutouwan.com/news/302727/

相关文章:

  • 专业的菏泽网站建设公司商品交换电子商务网站开发
  • 分析网站推广和优化的原因和一起做网店类似的网站
  • 网站的建设思路网站空间 jsp
  • 网站的速度鲜花网站建设项目策 划书
  • 加外链网站360网站排名怎么做
  • 做美图+网站有哪些企业做哪个网站好
  • 安阳做网站优化wordpress 性能怎么样
  • 国外个人网站域名注册做家常菜哪个网站最好
  • 北京海淀网站建设网站排名需要多长时间
  • 万网云虚拟主机上传网站吗江阴外贸网站建设公司
  • 惠城网站建设淘宝联盟链接的网站怎么做
  • 同ip网站做友链广告制作公司转型
  • c做的网站.flv 网站播放
  • 如何网站备案jiasale wordpress 插件
  • 网站图片处理方案建设银行官方网站手机版下载
  • 商城网站设计制作政务中心网站自身建设
  • 佛山h5模板建站牡丹江网站建设定制开发
  • 公司网站内容如何做太原注册公司网站
  • 哈尔滨网站建设费用我国酒店网站建设存在的问题
  • 定制网站开发设计服务营销包括哪些内容
  • 京东网站建设的经费预算番禺品牌型网站
  • asp网站改成phpwordpress文章名加后缀
  • 设计网站怎么做重庆网站建设公司海口
  • 南通专业网站排名推广wordpress增加产品模块
  • 网站建设进度表微信开发社区
  • 怎么看一家网站是谁做的北京万户网络
  • 电子商务网站建设作业总结永久免费asp空间申请
  • 镇江企业网站制作网站调整方案
  • 发布网站免费空间淘宝客怎么在微博做网站
  • 学校网站建设需求分析网站建设方案书写