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

网站建设运营厦门市建设管理协会网站首页

网站建设运营,厦门市建设管理协会网站首页,滨州网站开发,做百度网站每年的费用多少钱一、重排序。 1、为什么需要重排序#xff1f; 现在的CPU一般采用流水线来执行指令。一个指令的执行被分成#xff1a;取指、译码、访存、执行、写回、等若干个阶段。然后#xff0c;多条指令可以同时存在于流水线中#xff0c;同时被执行。 指令流水线并不是串行的#x…一、重排序。 1、为什么需要重排序    现在的CPU一般采用流水线来执行指令。一个指令的执行被分成取指、译码、访存、执行、写回、等若干个阶段。然后多条指令可以同时存在于流水线中同时被执行。 指令流水线并不是串行的并不会因为一个耗时很长的指令在“执行”阶段呆很长时间而导致后续的指令都卡在“执行”之前的阶段上。我们编写的程序都要经过优化后编译器和处理器会对我们的程序进行优化以提高运行效率才会被运行优化分为很多种其中有一种优化叫做重排序重排序需要遵守as-if-serial规则和happens-before规则不能说你想怎么排就怎么排如果那样岂不是乱了套。重排序的目的是为了性能。 Example: 理想情况下 过程Acpu0—写入1— bank0 过程Bcpu0—写入2— bank1 如果bank0状态为busy, 则A过程需要等待 如果进行重排序则直接可以先执行B过程。 2、重排序分类。 在执行程序时为了提高性能编译器和处理器会对指令做重排序。 编译器优化重排序编译器在不改变单线程程序语义的前提下可以重新安排语句的执行顺序。指令级并行的重排序如果不存l在数据依赖性处理器可以改变语句对应机器指令的执行顺序。内存系统的重排序处理器使用缓存和读写缓冲区这使得加载和存储操作看上去可能是在乱序执行。但是可以通过插入特定类型的Memory Barrier来禁止特定类型的编译器重排序和处理器重排序。 3、重排序过程。 一个好的内存模型实际上会放松对处理器和编译器规则的束缚也就是说软件技术和硬件技术都为同一个目标而进行奋斗在不改变程序执行结果的前提下尽可能提高并行度。JMM对底层尽量减少约束使其能够发挥自身优势。因此在执行程序时为了提高性能编译器和处理器常常会对指令进行重排序。一般重排序可以分为如下三种   从源码到最终执行的指令序列的示意图 编译器优化的重排序。编译器在不改变单线程程序语义的前提下可以重新安排语句的执行顺序指令级并行的重排序。现代处理器采用了指令级并行技术来将多条指令重叠执行。如果不存在数据依赖性处理器可以改变语句对应机器指令的执行顺序内存系统的重排序。由于处理器使用缓存和读/写缓冲区这使得加载和存储操作看上去可能是在乱序执行的。如图1属于编译器重排序而2和3统称为处理器重排序。这些重排序会导致线程安全的问题一个很经典的例子就是DCL问题。针对编译器重排序JMM的编译器重排序规则会禁止一些特定类型的编译器重排序针对处理器重排序编译器在生成指令序列的时候会通过插入内存屏障指令来禁止某些特殊的处理器重排序。 那么什么情况下不能进行重排序了下面就来说说数据依赖性。有如下代码 double pi 3.14 //A double r 1.0 //B double area pi * r * r //C 这是一个计算圆面积的代码由于A,B之间没有任何关系对最终结果也不会存在关系它们之间执行顺序可以重排序。因此可以执行顺序可以是A-B-C或者B-A-C执行最终结果都是3.14即A和B之间没有数据依赖性。具体的定义为如果两个操作访问同一个变量且这两个操作有一个为写操作此时这两个操作就存在数据依赖性这里就存在三种情况1. 读后写2.写后写3. 写后读者三种操作都是存在数据依赖性的如果重排序会对最终执行结果会存在影响。编译器和处理器在重排序时会遵守数据依赖性编译器和处理器不会改变存在数据依赖性关系的两个操作的执行顺序。 4、重排序对多线程的影响。 class ReorderExample { int a 0; boolean flag false; public void writer() { a 1; //1 flag true; //2 } Public void reader() { if (flag) { //3 int i a * a; //4 …… } } } flag为标志位表示a有没有被写入当A线程执行 writer 方法B线程执行 reader 方法线程B在执行4操作的时候能否看到线程A对a的写入操作 答案是: 不一定 由于操作1和操作2没有数据依赖关系编译器和处理器可以对这两个操作重排序。 如果操作1和操作2做了重排序程序执行时线程A首先写标记变量 flag随后线程 B 读这个变量。由于条件判断为真线程 B 将读取变量a。此时变量 a 还根本没有被线程 A 写入在这里多线程程序的语义被重排序破坏了   二、数据依赖性。 如果两个操作访问同一个变量且这两个操作中有一个为写操作此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型   名称代码示例说明写后读a 1;b a;写一个变量之后再读这个位置。写后写a 1;a 2;写一个变量之后再写这个变量。读后写a b;b 1;读一个变量之后再写这个变量。上面三种情况只要重排序两个操作的执行顺序程序的执行结果将会被改变。前面提到过编译器和处理器可能会对操作做重排序。编译器和处理器在重排序时会遵守数据依赖性编译器和处理器不会改变存在数据依赖关系的两个操作的执行顺序。注意这里所说的数据依赖性仅针对单个处理器中执行的指令序列和单个线程中执行的操作不同处理器之间和不同线程之间的数据依赖性不被编译器和处理器考虑。如果两个操作访问同一个变量且这两个操作中有一个为写操作此时这两个操作之间就存在数据依赖性。所以有数据依赖性的语句不能进行重排序。 三、as-if-serial规则。 as-if-serial语义的意思指不管怎么重排序编译器和处理器为了提高并行度单线程程序的执行结果不能被改变。编译器runtime 和处理器都必须遵守as-if-serial语义。 为了遵守as-if-serial语义编译器和处理器不会对存在数据依赖关系的操作做重排序因为这种重排序会改变执行结果。但是如果操作之间不存在数据依赖关系这些操作可能被编译器和处理器重排序。为了具体说明请看下面计算圆面积的代码示例 double pi 3.14; //A double r 1.0; //B double area pi * r * r; //C上面三个操作的数据依赖关系如下图所示 如上图所示A和C之间存在数据依赖关系同时B和C之间也存在数据依赖关系。因此在最终执行的指令序列中C不能被重排序到A和B的前面C排到A和B的前面程序的结果将会被改变。但A和B之间没有数据依赖关系编译器和处理器可以重排序A和B之间的执行顺序。as-if-serial语义把单线程程序保护了起来遵守as-if-serial语义的编译器runtime 和处理器共同为编写单线程程序的程序员创建了一个幻觉单线程程序是按程序的顺序来执行的。as-if-serial语义使单线程程序员无需担心重排序会干扰他们也无需担心内存可见性问题。 四、happens-before规则。   具体的一共有六项规则 1、程序顺序规则。可见性 一个线程中的每个操作happens-before于该线程中的任意后续操作。程序顺序规则中所说的每个操作happens-before于该线程中的任意后续操作并不是说前一个操作必须要在后一个操作之前执行而是指前一个操作的执行结果必须对后一个操作可见如果不满足这个要求那就不允许这两个操作进行重排序。 2、监视器锁规则。 对一个锁的解锁happens-before于随后对这个锁的加锁。 3、volatile变量规则。 对一个volatile域的写happens-before于任意后续对这个volatile域的读。 4、传递性。 如果A happens-before B且B happens-before C那么A happens-before C。 5、start()规则。 如果线程A执行操作ThreadB.start()启动线程B那么A线程的ThreadB.start()操作happens-before于线程B中的任意操作。 6、join()规则。 如果线程A执行操作ThreadB.join()并成功返回那么线程B中的任意操作happens-before于线程A从ThreadB.join()操作成功返回。 7、程序中断规则。 对线程interrupted()方法的调用先行于被中断线程的代码检测到中断时间的发生。 8、对象finalize规则。 一个对象的初始化完成构造函数执行结束先行于发生它的finalize()方法的开始。    转载于:https://www.cnblogs.com/igoodful/p/9473253.html
http://www.pierceye.com/news/77764/

相关文章:

  • 郑州整站网站优化城市分类信息网站建设
  • 网站营销活动网站建设的工作流程
  • 深圳招聘信息最新招聘2021甘肃网站建设方案优化
  • 郓城建设局网站线上营销模式
  • 南阳网站备案wordpress英文变成中文
  • 网站怎么自己建设莱芜0634技术支持 宿州网站建设
  • 青海个人旅游网站建设wordpress动漫电影主题公园
  • 福州seo网站推广优化wordpress icon设置
  • 站长之家综合查询工具创意网站特效
  • 网站关键词下降网页设计制作思路
  • 做视频网站成本网站做收录要多少长时间
  • 软件网站建设专业网站会员功能介绍
  • 怎样维护网站北京建筑公司排名
  • 至少保存十个以上域名网站平台网站开发
  • 上线倒计时单页网站模板吉林网站推广公司
  • 建设网站全部流程做企业网站 空间怎么买
  • 东莞排名seo网站关键词优化天津制作企业网站
  • 常州网站外包wordpress 产品视频上传
  • 网站续费服务内容义乌建设网站制作
  • 网站模版 之星wordpress外链跳转样式
  • 品牌型网站制作有哪些公司怎样做百度口碑推广自己的网站
  • 苏州市建设局投诉网站wordpress 无限下拉
  • 南京营销网站建设网站运营需要哪些人员
  • siteservercms做的网站在后台进行修改教程番禺做网站价格
  • 深圳龙华医院网站建设找企业做网站
  • 免费查公司的网站做网站的文章
  • 做网站用啥语言常州网站建设公司效果
  • 学院网站整改及建设情况报告网站类型是什么意思
  • 制作一个买股票的网站怎么做新手学做网站要学什么知识图文教程
  • wap网站制作需要多少钱没网站可以做百度推广吗