阻塞的线程是否会导致性能损失
本文关键字:性能 损失 是否 线程 | 更新日期: 2023-09-27 18:28:20
我有一个方法需要访问静态数组并进行一些繁重的计算。
public void DoIt(){
lock(myStaticArray){
// do crazy stuff
}
}
该方法需要一到两秒钟才能完成,因此在这里,几纳秒的时间来获取锁定并不重要。
现在假设有10个线程到达代码,其中一个线程已输入。现在,它是否会使线程内运行的代码比没有线程等待锁的情况下慢?等待锁定的被阻塞线程在等待时会占用CPU吗?
简单的答案是否定的,由于其他线程在等待锁,对正在运行的线程(做"疯狂事情"的线程)没有明显的CPU影响。
正如评论中所提到的,线程可能会在很短的一段时间内旋转等待("繁忙等待",即它们使用CPU时间),这将占用非常微不足道的CPU时间,然后它们将进入等待状态,这意味着它们将不会在CPU上调度,直到它们正在等待的对象发出信号(意味着正在工作的线程离开锁)。