【高并发】导致并发编程频繁出问题的“幕后黑手”-阿里云开发者社区

开发者社区> 冰河001> 正文

【高并发】导致并发编程频繁出问题的“幕后黑手”

简介: 工作了3年的小菜同学,平时在公司只是做些CRUD的常规工作,这次,出去面试被面试官一顿虐啊!尤其是并发编程的知识简直就是被吊打啊。小菜心有不甘,回来找自己工作经验非常丰富的朋友大冰来帮助自己提升并发编程的知识,于是便有了接下来的一系列小菜学并发的文章。
+关注继续查看

大家好,我是冰河~~

工作了3年的小菜同学,平时在公司只是做些CRUD的常规工作,这次,出去面试被面试官一顿虐啊!尤其是并发编程的知识简直就是被吊打啊。小菜心有不甘,回来找自己工作经验非常丰富的朋友大冰来帮助自己提升并发编程的知识,于是便有了接下来的一系列小菜学并发的文章。


并发编程的难点

并发编程一直是很让人头疼的问题,因为多线程环境下不太好定位问题,它不像一般的业务代码那样打个断点,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框架实现高并发程序?

好了,今天就到这儿吧,我是冰河,我们下期见~~

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【高并发】高并发分布式锁架构解密,不是所有的锁都是分布式锁!!
最近,很多小伙伴留言说,在学习高并发编程时,不太明白分布式锁是用来解决什么问题的,还有不少小伙伴甚至连分布式锁是什么都不太明白。明明在生产环境上使用了自己开发的分布式锁,为什么还会出现问题呢?同样的程序,加上分布式锁后,性能差了几个数量级!这又是为什么呢?今天,我们就来说说如何在高并发环境下实现分布式锁,不是所有的锁都是高并发的。 万字长文,带你深入解密高并发环境下的分布式锁架构,不是所有的锁都是分布式锁!!!
18 0
6个常见的高并发缓存问题,你知道几个?
6个常见的高并发缓存问题,你知道几个?
824 0
Linux下多线程编程遇到的一些问题
今天在学习了Linux的多线程编程的基础的知识点。于是就试着做了一个简单的Demo。本以为会得到预期的结果。不成想却遇到了意想不到的问题。 代码展示 我的C 代码很简单,就是一个简单的示例程序,如下: #include #include #include i...
694 0
【高并发】朋友问我学习高并发需不需要阅读源码,我是这样分析的!!
最近正在写【高并发专题】的文章,其中,在【高并发专题】中,有不少是分析源码的文章,很多读者留言说阅读源码比较枯燥!问我程序员会使用框架了,会进行CRUD了,是否真的有必要阅读框架源码?!
13 0
【高并发】导致并发编程频繁出问题的“幕后黑手”
工作了3年的小菜同学,平时在公司只是做些CRUD的常规工作,这次,出去面试被面试官一顿虐啊!尤其是并发编程的知识简直就是被吊打啊。小菜心有不甘,回来找自己工作经验非常丰富的朋友大冰来帮助自己提升并发编程的知识,于是便有了接下来的一系列小菜学并发的文章。
71 0
java并发笔记之synchronized 偏向锁 轻量级锁 重量级锁证明
java并发笔记之synchronized 偏向锁 轻量级锁 重量级锁证明本篇将从hotspot源码(64 bits)入手,通过分析java对象头引申出锁的状态;本文采用大量实例及分析,请耐心看完,谢谢 先来看一下hotspot的源码当中的对象头的注释(32bits 可以忽略了,现在基本没有32位...
951 0
Java 并发/多线程教程(六)-并发VS并行
       本系列译自jakob jenkov的Java并发多线程教程,个人觉得很有收获。由于个人水平有限,不对之处还望矫正!         在多线程线程编程中,我们经常提及并发和并行,但是并发和并行究竟是什么意思,他们所要表达是同一回事,还是不是同一加事。
1241 0
+关注
冰河001
冰河,互联网高级技术专家,《深入理解分布式事务:原理与实战》,《海量数据处理与大数据技术实战》和《MySQL技术大全:开发、优化与运维实战》作者,mykit-data与mykit-transaction-message开源框架作者,公众号【冰河技术】作者。
29
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载