如何让程序更快的运行
1、客观上说程序运行必会收到硬件资源如CPU计算能力、IO读写速度、网络带宽和软件资源如sockets连接数、数据库连接数的限制,为了更快的让程序运行尽早完成它要完成的任务就要突破这些限制。突破硬件资源的限制的方法是将程序的任务分解到多台硬件组成的集群上来执行;突破软件资源的限制可通过资源池的方式来解决。
2、为了更快的提升计算资源的使用效率,电脑系统中运行最快的CPU采用时间片轮换的方式来执行多个任务,如果一个任务还没执行完就要保存当前任务的上下文,下次再执行时再加载这个任务的上下文,这个过程称为上下文切换,上下文切换也会消耗系统资源,为了更高效的利用资源,要尽可能的减少上下文切换。
3、多任务(线程)运行时必然会涉及到共享变量的访问,保证在多任务执行下共享数据的安全访问称之为线程安全,Java中将线程安全划分为5类:不可变、绝对线程安全、相对线程安全、线程兼容、线程对立。
4、如何更好的共享数据,可以用不同步、非阻塞同步、互斥(组赛)同步。不用同步要保证代码块是可重入的或者使用ThreadLocal以空间来换时间的方法来进行。非阻塞同步多基于CAS自旋操作,又称乐观锁策略。互斥同步主要是应用各种锁,从最原始的同步关键字重量级锁逐步优化出现轻量级锁,再优化出现偏向锁;为了让程序能在大多数情况下更高效的运行,jdk6、7默认使用了偏向锁,若不成功会依次升级用轻量级锁、传统重量级锁。
5、操作原子性是多线程同步的一个重要特性,传统CPU通过阻塞总线来实现原子操作,现代CPU增加了阻塞锁定缓存来实现原子操作的特性。JAVA中要实现原子操作,要么通过锁同步,要么通过原子类的CAS自旋操作实现。
晚上睡了,未完待续……