作为软件开发的程序员,每天可能会面对***甚至***的数据处理,对于这样大数据的处理,并发是必不可少的。在程序员编写代码的时候,会从各个方面来考虑去把软件的并发性做好,保证在多用户,多线程的条件下,程序有条不紊的运行。
小编作为一个Java软件开发程序员,每天考虑的都是如何保证线程的安全,确保程序的高效并发。但是,这些都是从软件层面去考虑的,我们会考虑使用同步方法、同步代码块、原子类、并发锁、volatile关键字等等一些列方式去保证程序的并发不会出现错误。
大数据需要高并发
但是,我们却很少从硬件的角度去考虑并发问题,甚至不知道我们的计算机是如何进行并发的。所以,今天我们不谈软件,我们来讲一讲我们的电脑,我们的服务器以及各种硬件是如何实现并发,并且保证并发不会出错的!
学过Java语言的人都知道,Java有JVM,也就是Java的虚拟机,JVM就有很好的并发能力,今天我们讲的物理计算机的并发和JVM有很多相似的地方。所以,了解了物理计算机的并发知识后,对学习JVM会有很大的帮助!
计算机为什么要并发?
为什么要并发?因为人类的贪婪!因为人类想要向计算机索取更多!人类想要一步,进一步的压榨计算机。所以,为了更高效的利用计算机的计算能力,人类想出来了让计算机并发执行多个任务的办法!
高速处理器与低速存储之间的矛盾
我们都知道,计算机中的处理器决定了计算机的处理速度,现代处理器的计算速度是惊人的。但是,处理器并不能自己单独工作,至少在进行运算时需要与进行内存交互,读取数据,或是写入数据。内存这种存储设备的速度是没有办法和处理器相比的,这就造成了造成了处理器计算能力的浪费。这种矛盾就犹如人民日益增长的美好生活需要和不平衡不充分的发展之间的矛盾一样,需要聪明的程序员去解决!
调和处理器与内存的矛盾
聪明的人类想到一个办法,他们在处理器与内存中间,增加一层高速缓存,这层缓存作为处理器与内存之间的缓冲区。将需要处理的数据放入高速缓存,处理结束后再重新放入到内存中,这样就处理器就不需要无尽的等待与内存之间的交互。这样一波操作看似十分的***!但是,请往下看!
高速缓存带来的并发问题
高速缓存看似***的解决了高速的处理器与低速缓存之间的矛盾。但是,问题确被复杂化了。在多处理器的系统中,每个处理器都会有自己的高速缓存,数据都会被复制到高速缓存中处理,处理后再放回主内存。由于主内存是共享的,如果不同处理器高速缓存中的数据不同,这样就会造成缓存不一致的问题!
解决并发问题高速缓存并发问题
高速缓存的数据不一致,这种现象就像邻居家的小孩子吵架,吵到***就需要家长出面,把矛盾化解掉。对于计算机来说,这个家长就是缓存一致性协议,在读写操作时按照协议来操作,避免并发问题。这样,就***的解决了所有的问题!
处理器、高速缓存、缓存一致性协议、主内存
计算机高效并发的其他操作
除了高效缓存机制外,还有一些其他的操作也可以提高效率。例如,与Java的指令重排序一样,处理器也会根据执行效率,将代码进行重新排序进行执行。
当然,计算机提高并发效率的办法还有很多,小编日后也会慢慢道来。