上回我们讲到了高并发的实现,这次就来说说高并发的原理吧,希望对你们深入了解高并发有所帮助。
首先我们需要了解,什么是并发?什么又是并行?
什么是并发?
并发就是在一个时间点内发生多个相同的事件,这就是并发。例如这次疫情期间开学大家都在同一时间点抢票,对于服务器来说,这就是并发。
什么是并行?
在同一时间点多个服务器发生的事件就是并行。如上面所说:开学期间,大家都在抢票,你也在抢票,对于你和另外的人来说,这就是并行。想学习交流HashMap,nginx、dubbo、Spring MVC,分布式、高性能高可用、MySQL,redis、jvm、多线程、netty、kafka、的加尉(同英):1253431195 扩列获取资料学习,无工作经验不要加哦!
并发和并行概念很容易混淆,需要多加注意。
高并发编程的核心思想是什么?
保证程序运行时关键数据在多线程中的可见性、核心业务的原子性、多线程通信的有序性。
多线程中的可见性问题是什么?
线程是由CPU创建的,CPU在创建时会将堆内存中部分对象缓存至自己的缓存区中,如果当前线程运行期间如果有其它线程操作了该对象,数据不一致了就会导致程序出现问题。
如何解决可见性问题?
1).使对象不能被CPU缓存:使用volatile、synchronized关键字
2).使对象无法被修改:[枚举]enum、全局不可变量final、手动编写一个不可被改变的对象
原子性问题是什么?
什么是原子性?就是逻辑上不可被拆分的操作
为什么会有原子性问题?线程与线程之间是不可见的,同一任务在多个线程中并行的被执行,最终得到执行结果,这是多线程