上下文切换
1.1多线程一定比单线程执行任务更快吗?
不一定。因为线程创建、销毁以及上下文切换会消耗系统资源。
上下文切换:CPU通过时间片分配算法来循环执行任务,在任务间切换时会保存上一个任务到状态,下次切换回该任务时会再加载这个任务到状态,任务从保存到再加载到过程就是一次上下文切换。
1.2 如何减少上下文切换?
无锁并发编程、CAS算法、使用最少线程、使用协程。
死锁
2.1 为什么会产生死锁?
产生死锁的原因:
(1)竞争系统资源 (2)进程的推进顺序不当
产生死锁的必要条件:
互斥条件:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所 占用。
请求和保持条件:当进程因请求资源而阻塞时,对已获得的资源保持不放。
不剥夺条件:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。
环路等待条件:在发生死锁时,必然存在一个进程--资源的环形链。
2.2 避免死锁到常见方法?
避免一个线程同时获取多个锁
避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源
尝试使用定时锁,使用 lock.tryLock ( timeout ) 来替代使用内部锁机制
对于数据库锁,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败的情况。
资源限制的挑战
3.1 什么是资源限制?
资源限制是指进行并发编程时,程序的执行速度受限于计算机软、硬件资源。
硬件资源限制:网络带宽、硬盘读写速度和CPU的处理速度等。
软件资源限制:数据库等连接数和 socket 连接数等。
网友评论