1.1 上下文切换
CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务,在切换前会保存上一次任务的状态,以便下次切换回来,可以再加载这个任务的状态。所以任务从保存到再加载的过程的过程就是一次上下文的切换。比如我们在读一本英文书时,有一个单词不认识,需要去查字典。在查字典之前,需要记录下当前书的页码,等查完字典后再回来继续读这本书。这样就是一个切换过程,这样会影响读书的效率的。
总结:上下文切换是影响执行效率的。
1.2 如何减少上下文切换
1.2.1 无锁并发编程:多线程竞争锁,会引起上下文切换。所以无锁并发是减少上下文切换的一个好办法。比如在多线程处理数据时,可以将数据id按照Hash算法取模分段,不同的线程处理不同段的数据。Hash算法
1.2.2 CAS算法:java并发包下的类进行数据更新,不需要加锁
12.3 不使用线程
1.3 资源限制的问题
单机资源是有限的,可以考虑让程序在多个机器上运行,比如分布式环境;也可以使用连接池技术将资源复用。