1条回答
默认
最新
回答交流
Markdown
请输入正文
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~

Oracle的闩会“自旋”吗?
闩是一种锁,锁是串行化设备,而串行化设备会妨碍可扩展性。
等待闩可能是一个代价很高的操作。如果闩不是立即可用的,就得等待(大多数情况下都是如此)。在一台多CPU机器上,会话会自旋(spin),也就是说,在循环中反复地尝试得到闩。
出现自旋的原因是上下文切换的开销很大(上下文切换是指被“踢出”CPU,然后又必须调度回CPU)。所以,如果进程不能立即得到闩,就会继续呆在CPU上,并立即再次尝试,而不是先休眠等到必须调度回CPU时才再次尝试。之所以呆在CPU上,是因为指望闩的持有者正在另一个CPU上忙于处理(由于闩设计为保持很短的时间,所以一般确实是这样的),而且会很快放弃闩。