Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

perf:spin key acqiure lock #34

Closed
wants to merge 2 commits into from
Closed

Conversation

qinguoyi
Copy link
Contributor

优化自旋锁获取逻辑,不再每隔100ms轮询,而是解锁时传入chan信号

@jefferyjob jefferyjob added the question Further information is requested label Aug 24, 2024
@jefferyjob
Copy link
Owner

对于您提交的PR我有以下思考,烦请商榷 🤔

主要问题

  1. 锁获取的公平性

    • 由于使用了 unLockChan 通知机制,当前持有锁的机器(如 A 机器)在锁释放后通过自旋锁重新获取锁的概率会比其他机器(如 B 机器)更高。这可能导致锁的分布在不同机器间不公平,尤其是在高并发的环境下,某些机器可能会频繁抢占锁资源,影响系统的负载均衡。
  2. 潜在的并发问题

    • 在多协程环境下,多个等待者可能无法同时正确接收到通知。如果没有正确处理通道的并发场景,可能会导致系统行为异常或锁的获取顺序不符合预期。

优点

  1. 减少无效重试

    • unLockChan 能够减少自旋锁频繁轮询带来的资源消耗,提高了系统的效率。当锁被释放时,通过通道通知等待的协程立即尝试获取锁,减少了不必要的 CPU 和资源浪费。
  2. 提高锁获取的响应速度

    • 使用通道机制可以更及时地响应锁的释放,减少了锁获取的延迟。这在高并发场景下可以显著提高锁的获取效率。
  3. 降低系统资源消耗

    • 通过减少无效的锁请求和频繁的轮询,降低了系统的资源消耗,使得锁的操作更加轻量化。

建议与改进

  1. 考虑锁获取的公平性

    • 针对当前持有锁的机器优先获取锁的现象,建议加入一定的随机延迟,以减少单个机器频繁抢占锁的情况,提升系统的公平性。
  2. 增强并发处理的健壮性

    • 进一步优化 unLockChan 的并发处理机制,确保在多协程环境下,通道通知能够准确无误地传递给所有等待的协程。
  3. 引入其他分布式锁优化策略

    • 可以考虑引入其他分布式锁优化策略,例如 Redis 官方推荐的 Redlock 算法,以提高系统的可靠性和公平性

总的来说 unLockChan 的引入确实带来了性能上的优化,但也引发了公平性和实现复杂性等方面的问题。

@qinguoyi
Copy link
Contributor Author

感谢回复,这几天看了下相关资料,还是轮询的方法比较好,先close了 ^_^

@qinguoyi qinguoyi closed this Aug 27, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants