【高并发】导致并发编程频繁出问题的“幕后黑手”
大家好,我是冰河~~
工作了3年的小菜同学,平时在公司只是做些CRUD的常规工作,这次,出去面试被面试官一顿虐啊!尤其是并发编程的知识简直就是被吊打啊。小菜心有不甘,回来找自己工作经验非常丰富的朋友大冰来帮助自己提升并发编程的知识,于是便有了接下来的一系列小菜学并发的文章。
(福利推荐:阿里云、腾讯云、华为云服务器最新限时优惠活动,云服务器1核2G仅88元/年、2核4G仅698元/3年,点击这里立即抢购>>>)
并发编程的难点
并发编程一直是很让人头疼的问题,因为多线程环境下不太好定位问题,它不像一般的业务代码那样打个断点,debug一下基本就能够定位问题所在。并发编程中,出现的问题往往都是很诡异的,而且大多数情况下,问题也不是每次都会重现的。那么,我们如何才能够更好的解决并发问题呢?这就需要我们了解造成这些问题的“幕后黑手”究竟是什么!
操作系统做出的努力
计算机的制造商为了提升计算机的整体性能,对计算机做出了相应的优化措施。
CPU增加了缓存
CPU对于数据的计算速度远远高于从内存中存取数据的速度,我们可以想象一下,如果说,CPU对于数据的计算需要一天时间,那么,从内存中读取和写入数据可能分别需要1年的时间。也就是说,在这一年365天当中,CPU只需要工作一天,而364天的时间都在等待从内存中读取或者存储数据。这对于CPU的利用率来说,就是极大的浪费了。
为了缓和CPU与内存之间的速度差异,计算机的制造商为CPU增加了缓存。
操作系统增加了进程和线程
CPU的速度比内存快的多,而内存又比磁盘快的多。如果说,CPU运算需要一天的时间,从内存读取数据需要一年的话,那从磁盘读取数据就需要10年的时间了。没错,磁盘就是这么慢啊!
为了缓和CPU和磁盘设备之间的速度差异,操作系统的制造商增加了进程和线程技术。
优化CPU指令执行顺序
我们写的并发程序在操作系统上运行时,对于CPU缓存的使用可能会不太合理,造成CPU缓存的浪费。
为了使CPU的缓存能够得到更加合理的利用,编译程序对CPU上指令的执行顺序进行了优化。
揪出“幕后”黑手
计算机和操作系统的制造商对计算机和操作系统进行的优化,在无形当中造成了很多并发编程的问题。本质上,并发编程的很多诡异的问题源头也在于此,这也是并发编程频繁出问题的“幕后黑手”。所以,我们可以将“幕后黑手”总结如下。
没错,这就是造成并发编程问题的“幕后黑手”!!后面我们将分别细化说明这些“幕后黑手”。
总结
了解并掌握并发编程问题的“幕后黑手”,有助于我们更好的学习并发知识和解决并发问题。
最后,附上并发编程需要掌握的核心技能知识图,祝大家在学习并发编程时,少走弯路。
总结
并发编程旨在最大限度的利用计算机的资源,提高程序执行的性能,这需要线程之间的分工和同步来实现,在保证性能的同时,又需要保证线程的安全,这就又需要保证线程之间的互斥性。而并发编程的难点问题,往往又是由可见性、原子性和有序性问题导致的。所以,我们在学习并发编程时,一定要先弄懂线程之间的分工、同步和互斥。
最后,附上并发编程需要掌握的核心技能知识图,祝大家在学习并发编程时,少走弯路。
推荐阅读
《要想学好并发编程,关键是要理解这三个核心问题》
《实践出真知:全网最强秒杀系统架构解密,不是所有的秒杀都是秒杀!!》
《注意:线程的执行顺序与你想的并不一样!!》
《深入解析Callable接口 》
《两种异步模型与深度解析Future接口!》
《解密SimpleDateFormat类的线程安全问题和六种解决方案!》
《不得不说的线程池与ThreadPoolExecutor类浅析》
《深度解析线程池中那些重要的顶层接口和抽象类》
《从源码角度分析创建线程池究竟有哪些方式》
《通过源码深度解析ThreadPoolExecutor类是如何保证线程池正确运行的》
《通过ThreadPoolExecutor类的源码深度解析线程池执行任务的核心流程》
《通过源码深度分析线程池中Worker线程的执行流程》
《从源码角度深度解析线程池是如何实现优雅退出的》
《ScheduledThreadPoolExecutor与Timer的区别和简单示例》
《深度解析ScheduledThreadPoolExecutor类的源代码》
《由InterruptedException异常引发的思考》
《浅谈AQS中的CountDownLatch、Semaphore与CyclicBarrier》
《浅谈AQS中的ReentrantLock、ReentrantReadWriteLock、StampedLock与Condition》
《朋友去面试竟然栽在了Thread类的源码上》
《如何使用Java7提供的Fork/Join框架实现高并发程序?》
好了,今天就到这儿吧,我是冰河,我们下期见~~
你还在原价购买阿里云、腾讯云、华为云、天翼云产品?那就亏大啦!现在申请成为四大品牌云厂商VIP用户,可以3折优惠价购买云服务器等云产品,并且可享四大云服务商产品终身VIP优惠价,还等什么?赶紧点击下面对应链接免费申请VIP客户吧:
相关文章
- 2023.1最新IntelliJ IDEA激活码、Java激活码(持续更新中)
- java服装商城购物商场项目源码
- java基于ssm的个人博客系统个人博客网站个人博客项目源码
- java基于ssm的图书管理系统图书借阅管理网站图书管理网站源码
- java书店带商家商城书店多商家书店系统源码
- Java 中经常被提到的 SPI 到底是什么?
- 面试官让我设计一个基于分布式锁的库存超卖方案,并发量很高那种
- 几百个数据,Promise.all 没做控制并发?那你心可真大啊!
- 讲透JVM类加载机制,向高手进阶
- JVM 的栈上分配、TLAB、PLAB 有啥区别?
- JVM学习- - -虚拟机栈详解
- Android 12 蓝牙适配 Java版
- 从0学Java之While循环
- 从0学Java之关系运算以及判断
- Java 如何验证文件名的有效性?
- Java保证线程安全的方式有哪些?
- 如何在Java中加密和解密zip文件?
- Java 数据结构与算法之树(AVL)
- Java 中的接口还可以这样用,你知道吗?
- Java中容器设计的进化史:从白盒到黑盒,再到跻身为设计模式之一的迭代器