提高程序的响应速度
充分利用计算机资源
现代CPU使用时间片轮转法来进行线程的调度,给每个线程分配固定的时间片,当一个线程时间片用完,就要保存当前线程状态信息,执行其他线程,当再次调度到该线程时,加载线程状态信息,继续执行。
一次上下文切换 = 保存线程状态信息 + 加载线程状态信息
从理论上来说,上下文切换会影响程序的执行速度;
测量上下文切换的时长: Lmbench
测量上下文切换的次数: vmstat
一个线程正在请求获取一个永远获取不到的锁。
例如:
public static final String lock1 = "lock1";
public static final String lock2 = "lock2";
public static void main(String[] args) throws InterruptedException {
Thread threadA = new Thread(() -> {
synchronized (lock1) {
System.out.println("线程A获取 lock1 锁");
synchronized (lock2) {
System.out.println("线程A获取 lock2 锁");
}
}
});
Thread threadB = new Thread(() -> {
synchronized (lock2) {
System.out.println("线程B获取 lock2 锁");
synchronized (lock1) {
System.out.println("线程B获取 lock1 锁");
}
}
});
threadA.start();
threadB.start();
}
2.1 如何避免死锁?
3.1 什么是资源限制?
资源限制是在进行并发编程时,程序的执行速度受限于计算机软件或硬件资源。
3.2 引发的问题?
因受限于资源,多线程执行并不会加快,反而增加了上下文切换和资源调度的时间。
3.3 如何解决?
硬件资源限制: 使用集群并行执行程序
软件资源限制: 使用资源池将资源复用
3.4 在资源限制下,如何进行并发编程?
根据不同的资源限制调整程序的并发度。
原文:https://www.cnblogs.com/chen-jia-cheng/p/14670876.html