范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

并发编程进阶一从并发引发的潜在问题开始

  "并发编程"场景对于很多读者来说可以算是"既熟悉,又陌生"。
  熟悉之处在于:对于一些有一定经验的读者,在面试过程中经常会被问到多线程、高并发的技术解决方案。
  陌生之处则是我们的日常业务开发过程中很少用到。
  所以本系列的初衷是帮助存在以上情况的读者填补并发编程这方面认知的空白,以便在需要的时候或者面试的时候能够有所帮助。
  读者的收获  什么是并发编程  并发编程的潜在问题  同名公众号:浩说编程 [ 技术分享 | 资源整合]
  编辑消息:"阿里技术资料",获取大厂技术资源,你会学到更多一、CPU缓存引起的可见性问题
  首先需要通过流程图来了解一下CPU处理数据的逻辑:
  可以看到,CPU在处理数据的时候涉及到三个区域: 硬盘、内存、CPU中的缓存区 。
  目标数据首先在硬盘中(数据库)通过 I/O 进入内存,然后再从内存进入CPU的缓存区,以供CPU处理。
  CPU在处理之后会将数据暂时保存在自己的缓存中,在合适的时机再原路返回到硬盘中。
  对于多核CPU来说,它的并发情况是这样的:
  参考上图,根据上面的内容:CPU在处理数据之后不会直接放回内存中。
  所以对于同一个参数,每个CPU在将处理之后的数据放回内存之前,看到的都是 各自缓存中的数据 。
  也就是说 参数在CPU之间是不可见的 ,这就导致了数据一致性的问题。
  读者可以用下面这段代码来验证一下:  public class Test {   private long count = 0;   private void add10K() {     int idx = 0;     while(idx++ < 10000) {       count += 1;     }   }   public static long calc() {     final Test test = new Test();     // 创建两个线程,执行add()操作     Thread th1 = new Thread(()->{       test.add10K();     });     Thread th2 = new Thread(()->{       test.add10K();     });     // 启动两个线程     th1.start();     th2.start();     // 等待两个线程执行结束     th1.join();     th2.join();     return count;   } }
  代码中做了两个线程,调用了相同的代码:计算数值之和。
  通过数学层面结果应该是20000,实际上结果并不等于20000,这就是并发编程的第一个问题: CPU缓存引起的可见性 。
  二、线程切换引发的原子性问题
  通过可见性问题相信读者对并发已经建立了一个初步的印象,接下来继续看并发存在的第二个问题:原子性
  无论是编程语言Java还是CPU都支持多线程的方式执行多任务处理,而原子性问题就产生于两者切换线程的" 最小命令单元 "的差异。
  在Java中,这是一个最小命令单元:  count += 1;
  受编程语言影响,读者可能会潜意识的认为在CPU中该命令同样也是最小命令单元,但其实不然。
  在CPU中这个指令至少会被 拆解成三个最小命令单元 :
  1、把变量 count 从内存加载到 CPU 的寄存器
  2、寄存器中执行 +1 操作
  3、将结果写入内存(缓存机制导致可能写入的是 CPU 缓存而不是内存)
  我们把Java的一条最小命令单元在CPU的多条最小命令单元执行的过程中不被中断的特性就叫做 原子性 。
  当这种原子性被破坏,就会发生原子性问题。
  三、编译优化产生的有序性问题
  并发的第三个问题是由编译器引起的,在我们的Java文件被编译成class文件的时候,编译器为了优化代码可能会在 不影响最终结果 的情况下, 调整语句的顺序 。
  编译之前:  int A = 1; int B = 2; int c = A + B;
  编译之后:  int B = 2; int A = 1; int c = A + B;
  这种顺序调整在并发的时候可能会造成意想不到的问题,比如下面这个例子,这是一个基于双重校验锁的单例模式实现:  public class Singleton {   static Singleton instance;   static Singleton getInstance(){     if (instance == null) {       synchronized(Singleton.class) {         if (instance == null)           instance = new Singleton();         }     }     return instance;   } }
  注意代码的第7行,编译器对于 new操作 进行了顺序优化:
  这个时候问题就出现了:
  试想一下,A线程在执行了代码的 第7行 ,顺序2之后,在执行顺序3之前切换到了B线程。
  当B线程走到代码的第4行,由于A线程的顺序2使得 变量instance已经有了指向 ,所以instance!=null,使得线程B直接跳到代码的第10行。
  而此时并 未执行顺序3对Singleton对象初始化 ,于是在我们调用instance的成员变量的时候就可能引发空指针异常。
  这里逻辑可能会有点绕,读者可以多看几次理解一下。
  以上就是并发产生的问题,之后的所有"并发编程"的内容都是为了解决这些问题而产生的,所以了解了问题根源对之后的学习会很有帮助。浩说编程,帮你学到更多。

iPhone不送充电头在巴西遭罚,欧盟推议案统一智能手机充电接口为了给环保事业作贡献,苹果从iPhone12系列开始,便不再附送耳机和充电器。今年的iPhone13系列甚至取消了塑料覆膜包装,在生产和包装中采用再生材料,iPhone13的包装盒SA2021年全球智能手机批发价格将升至310美元,同比增长11据StrategyAnalytics微信公众号9月30日消息,StrategyAnalytics无线智能手机战略(WSS)服务最新研究指出,全球智能手机批发价格将从2020年的27亚马逊推出一款名为Astro的隐私保护机器人雷锋网消息,亚马逊于近日推出一款名为Astro的隐私保护机器人。这款机器人可以拍摄到房屋内的每个角落可以和你视频通话还可以根据人脸识别不同人的身份。Astro的脸是一个普通的平板计华为手机与苹果手机你会买谁?感谢您的阅读!华为手机和苹果手机到底会买谁?不管是华为手机还是苹果手机,都是目前来说非常值得我们消费者关注的手机品牌,这两个品牌的优势确实还是比较明显的,国产手机特别是华为手机,它苹果手机怎样设置才运行速度快?话不多说,直入主题(手机型号iPhone6splus,IOS版本13。7)1。设置电池电池健康最大容量首先,说一下苹果公司被曝光的CPU降频,这个事件说的是iPhone通过升级系统华为智能汽车解决方案全球首个通过DEKRA德凯相关认证文福布斯中国9月30日,华为智能汽车解决方案BU正式获得汽车网络安全ISOSAE214342021符合性证书,成为全球首个通过DEKRA德凯ISOSAE21434认证的智能汽车解决滥用人工智能技术之刑事风险及其防控房香宇董邦俊(中南财经政法大学刑事司法学院)人工智能是计算机科学的分支,致力于让计算机实现人类的智能。与AI技术有关的概念是机器学习,它赋予计算机系统从数据中学习的能力,与其它计算小米真正的竞争对手来啦!并不是华为小米真正的竞争对手来啦!作为我们国内的科技企业,小米总想着要干翻华为,但小米似乎选错了竞争对象,因为小米与华为不是一个档次上的,小米的竞争对手也不是华为,那么谁才是小米真正的竞争对机构芯片短缺致手机厂商仅获70零部件订单iPhone受影响最小财经网科技10月1日讯,据新浪科技消息,最新一项研究显示,由于全球芯片短缺,智能手机制造商目前只能获得其零部件订单的70至80,但苹果公司的iPhone手机几乎没有受到影响。本月中新能源车ETF(159806)上涨5。05上涨原因分析新能源汽车销量大涨推动动力锂电池迅速发展,从而带动了锂电池上游原材料价格快速攀升叠加海外疫情背景,锂电池原料供应紧张,供需缺口扩大。新能源汽车销量大涨推动动力锂电池迅速积极创新科研组织模式先进的科研组织模式,能够有效整合和利用各种科研资源,激发科研主体的创新活力,提高科学技术研究的整体效益不久前,中国科学院天津工业生物技术研究所在淀粉人工合成方面取得重大突破,在国际
荣耀牵手谷歌!或与华为顶峰再相见10月11日,荣耀在海外官方社交平台Twitter上公布,已恢复与谷歌的合作,其中HONOR50系列海外版本将搭载GoogleMobileServices(GMS)。图片来源荣耀官完美支持iPhone13全系列,辉越光电推出33W迷你充面对iPhone13不配送充电器带来的快充需求缺口,辉越光电先后推出了33W迷你充27W迷你充20W多彩迷你充,对更高功率需求的用户还推出了另外10余款大功率多口快充,近日为丰富用新iMacPro曝光,苹果正借助M1系列芯片调整整条Mac产品线苹果已经从在线AppleStore下架了21。5英寸的iMac,这让基于英特尔的Mac产品又少了一款,但用户目前还可以选择今年发布的24英寸iMac(M1)或基于英特尔处理器的27一亿像素回归RedmiNote11系列根据官方公布的海报,RedmiNote11系列背部镜头位置印有108MP,表明RedmiNote11系列将会采用一亿像素主摄。去年Redmi在RedmiNote9Pro上使用了一亿车主日记买车前后的变化,第三代哈弗H6用真实口碑告诉你买车之后生活会有什么样的变化?我和媳妇买车半年多了,感觉有了车之后变化最明显的地方,就是我们的活动半径变大了。以前我们的活动范围就是在家附近,下了班回家吃饭,追追剧,不想出去,也懒爆胎来得太突然这5个特征要知道汽车已经成为我们日常出行的代步工具,但是很多人对于汽车的基础知识却很薄弱。现在很多交通事故都是爆胎引起的,那么我们如何提前判断汽车是否会爆胎呢?1。轮胎使用时间过长每样事物都有一定缤越欢迎垂询让利高达9000元福田吉利深意店缤越现车限时优惠,可试乘试驾缤越现车在店,购车可享多重优惠方案零息方案30首付2年免息50至高3年0息超长期限超低月供方案首付50,每天31元缤越带回家附加贷0首付低星越店内优惠高达1。2万欢迎垂询福田吉利深意店星越现车限时优惠,可试乘试驾星越现车在店,购车可享多重优惠方案零息方案30首付起2年0息50首付起3年0息超长期限超低月供方案首付50,每天40元星越带回家附加贷0首博越全系热销中限时优惠高达1万元福田深圳深意店博越PRO现车限时优惠,可试乘试驾博越PRO现车在店,购车可享多重优惠方案零息方案首付30起2年0息首付45起享3年0息超长期限超低月供方案每天一杯奶茶钱博越PRO贷帝豪GL新能源限时优惠让利高达1。3万深圳深意吉利汽车全系底价促销,恭迎到店品鉴!近期购帝豪GLPHEV优惠政策如下1。现金优享现金优惠13000元,2。金融优享银行贴息4000元,3。置换优享置换补贴7000元,4。远景限时优惠高达8000元欢迎垂询福田深圳深意店远景现车限时优惠,可试乘试驾远景现车在店,购车可享多重优惠方案零息方案首付20,2年0息50享3年0息超长期限超低月供方案首付50,每天18元远景带回家附加贷0首付低