前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分布式锁:一、基础知识

分布式锁:一、基础知识

作者头像
灰子学技术
发布2020-09-07 15:19:55
3150
发布2020-09-07 15:19:55
举报
文章被收录于专栏:灰子学技术
一、在讨论锁之前,我们需要先看下进程之间的两种主要关系,同步和互斥。

互斥:是指散步在不同进程之间的若干程序片段,当某个进程运行其中一个程序片段时,其它进程就不能运行它 们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。

同步:是指散步在不同进程之间的若干程序片断,它们的运行必须严格按照规定的 某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。

二、在这之前,我们先看下什么是锁?锁的种类?以及为什么我们需要锁?

锁:是在解决资源竞争的时候的一种策略,是处理并发的一种同步手段。例如:当多个线程、进程或者客户端在访问同一个资源的时候,因为访问和更改该资源的先后顺序的问题,而导致获取的信息不一致。而锁的引入,可以保证该资源的被同一个使用者使用时,操作结果是一致的。

最常用的锁,有读写锁和互斥锁。

读写锁:主要用于多线程,解决多线程之间的读写问题,主要是为了解决并发读的性能问题,使用该锁,可以大大提高数据并发访问的性能,只有在写时,才会阻塞所有的读锁。

读写锁特点:

代码语言:javascript
复制
1)多个读者可以同时进行读
2)写者必须互斥(只允许一个写者写,也不能读者写者同时进行)
3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)

互斥锁:lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。当任何一个线程获取到锁后,其他线程如果需要使用该临界区内代码,则必须等待前一个线程使用完毕后释放锁。

互斥锁特点:xi

代码语言:javascript
复制
 一次只能一个线程拥有互斥锁,其他线程只有等待。
三、分布式锁:

用于分布式系统中,是控制分布式系统之间同步访问共享资源的一种方式。主要用于解决下面两个场景:

1.效率:避免不同节点重复相同的工作。如果一个动作只需要一个节点处理,那我们要避免这个动作被多个节点都进行操作。

2.正确性:如果一个数据会被不同的节点使用,而这个数据的操作受不同节点的操作影响,那么我们需要分布式锁来保证操作的正确性。

分布式锁需要具备的特性:

代码语言:javascript
复制
1.互斥性,这个与非分布式锁并无明显区别,需要保证单个节点之间的互斥性。
2.可重入性:同一个人节点的同一个线程获取到这个锁之后,
该线程还是可以继续获取该锁。
3.锁超时机制:因为分布式节点往往分布在不同的机器上,
那么就涉及到网络通讯的情况,而网络通讯又具备不稳定性,
所以我们需要超时机制来保证,锁不能一致被释放。
4.高效性:不能因为锁的缘故,导致分布式系统,卡在这一步。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 灰子学技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、在讨论锁之前,我们需要先看下进程之间的两种主要关系,同步和互斥。
  • 二、在这之前,我们先看下什么是锁?锁的种类?以及为什么我们需要锁?
  • 三、分布式锁:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档