java并发编程的艺术第一章读书笔记

1.1 上下文切换

即便是单核CPU也支持多线程并发,CPU通过给每个线程分配时间片(几十毫秒)来实现并发的机制。通过不停切换线程,使得多个任务并发处理。切换前会保存上个线程的状态,以便下次切换回这个任务时,可以再加载这个任务的状态。任务从保存到再加载的过程就是一次上下文切换。由于上下文切换以及线程创建的开销,可能会导致并发执行的速度比串行执行要慢。

通过无锁并发编程(如将不同的线程处理不同段的数据),CAS算法,使用最少线程和使用协程可以减少上下文切换。

1.2 避免死锁

避免死锁的常见方法:

避免一个线程同时获取多个锁。

避免一个线程在锁内占用多个资源,尽量保证每个锁只占用一个资源。

尝试使用定时锁来代替内部锁机制。

对于数据库锁,加锁和解锁必须在一个连接里,否则会出现解锁失败的情况。

1.3 资源限制

资源限制是指在进行并发编程时,程序的执行速度受限于硬件或软件资源。例如带宽,硬盘读写,以及CPU处理速度,数据库连接数等等。并发编程中,将代码执行速度加快的原则是将代码中串行执行的部分变成并行。但如果受限于资源,并发的代码仍然会串行执行。

通过集群(让程序在多机上运行)或资源池复用(资源池讲数据库和Socket连接复用)可以帮助缓解资源限制问题,根据不同的资源限制调整并发度。




猜你喜欢

转载自www.cnblogs.com/love17311706/p/11958602.html