【分布式理论9】分布式协同:分布式系统进程互斥与互斥算法
文章目录
- 一、互斥问题及分布式系统的特性
- 二、分布式互斥算法
- 1. 集中互斥算法
- 调用流程
- 优缺点
- 2. 基于许可的互斥算法(Lamport 算法)
- 调用流程
- 优缺点
- 3. 令牌环互斥算法
- 调用流程
- 优缺点
- 三、三种算法对比
在分布式系统中,多个应用服务可能会同时访问同一个资源,导致互斥问题的出现。例如,在分布式数据库环境中,多个事务可能同时尝试对同一行数据加锁,导致锁争抢,影响系统性能。为了避免互斥现象,并保证数据的一致性,引入了分布式锁机制。而支撑分布式锁的理论基础,就是分布式互斥算法。
一、互斥问题及分布式系统的特性
以现实生活中的例子来类比,假设有两个小孩想玩同一个玩具,但玩具只能由一个小孩使用,另一个小孩必须等待。这种情况类似于计算机系统中的互斥问题:
- 共享资源(玩具)只能由一个进程访问。
- 竞争该资源的进程必须遵循一定的顺序。
- 若资源被占用,其他进程必须等待。
在单机环境下,进程互斥问题可以通过线程同步等方式解决。但在分布式系统中,由于各个进程部署在不同的服务器上,互斥问题变得更为复杂,必须考虑以下特性:
- 互联网特性:分布式系统中的服务器通过网络连接,网络延迟、丢包等问题可能影响互斥操作。
- 没有统一时钟:不同服务器的时钟不同步,导致进程无法准确判断资源请求的先后顺序。
- 服务器和网络可能故障:当某个服务器或进程发生故障,其他服务器需要感知并进行相应处理。
二、分布式互斥算法
针对分布式系统的互斥问题,研究者提出了不同的互斥算法。这些算法适用于不同的场景,例如,某些算法适合小规模系统,而另一些则更适用于高并发环境。主要包括:
1. 集中互斥算法
集中互斥算法的核心思想是引入一个全局协调者(类似于老师管理玩具的使用),由协调者统一管理资源访问请求。

调用流程
- 进程向协调者发送资源访问请求。
- 协调者根据请求时间戳排队,并允许最先请求的进程访问资源。
- 进程访问资源后,向协调者发送释放通知。
- 协调者允许下一个进程访问资源。

优缺点
- 优点:实现简单,协调者能有效控制资源的访问。
- 缺点:
- 协调者可能成为系统瓶颈,影响性能。
- 协调者的单点故障会导致系统不可用。
2. 基于许可的互斥算法(Lamport 算法)
在集中互斥算法中是通过协调者记录先后顺序的,而在 Lamport 算法中,每个节点进程都会维护一个逻辑时钟,当系统启动时,所有节点上的进程都会对这个时钟进行初始化,每当节点进程向其他节点进程发起临界资源访问申请的时候,就会将这个逻辑时间戳加 1。
即该算法不依赖单个协调者,而是由各个进程相互协商资源访问权。
调用流程
- 进程向所有其他进程发送资源访问请求(REQUEST)。
- 其他进程收到请求后,将其加入本地队列,并根据逻辑时钟更新顺序。
- 当请求进程收到所有进程的许可(REPLY)后,即可访问资源。
- 访问完成后,进程向所有等待的进程发送释放消息(RELEASE),其他进程更新队列。

优缺点
- 优点:
- 解决了分布式系统时钟不同步的问题。
- 适用于进程较少的场景。
- 缺点:
- 需要进行大量消息传输,通信开销较大。
- 资源请求多时,系统响应可能变慢。
3. 令牌环互斥算法
令牌环算法类似于小孩们围成一圈,轮流传递一个令牌(Token),拿到令牌的孩子才能玩玩具。
如下图令牌环互斥算法中的所有节点进程构成一个环结构,每个节点进程都有一个唯一 ID 作为标识,且都会记录对应前驱节点和后继节点的地址。
令牌作为访问临界资源的许可证,会按照一定方向(顺时针、逆时针)在节点进程之间传递,收到令牌的节点进程有权访问临界资源,访问完成后将令牌传送给下一个进程;若拿到令牌的节点进程不需要访问临界资源,则直接把令牌传递给下一个节点进程。

调用流程
- 进程形成一个逻辑环,并按固定方向传递令牌。
- 持有令牌的进程可以访问资源。
- 访问完成后,进程将令牌传递给下一个进程。
- 若进程不需要访问资源,则直接传递令牌。
优缺点
- 优点:
- 令牌唯一,避免竞争冲突。
- 进程不会长时间等待,保证公平性。
- 缺点:
- 令牌丢失时,系统需要恢复令牌,增加复杂度。
- 进程数量变化时,需要重构令牌环。
- 即使没有进程访问资源,令牌仍在传递,造成资源浪费。
三、三种算法对比
| 算法 | 优点 | 缺点 | 适用场景 | 消息复杂度 | 故障恢复能力 |
|---|---|---|---|---|---|
| 集中互斥算法 | 实现简单,便于管理 | 协调者可能成为瓶颈,单点故障风险高 | 进程数量较少,资源访问请求不频繁 | 低 | 低(协调者故障导致不可用) |
| 基于许可的算法 | 无单点故障,保证公平性 | 通信开销大,进程数量多时性能下降 | 进程较少,通信代价可接受的场景 | 高 | 中(进程故障会影响队列排序) |
| 令牌环算法 | 令牌唯一,访问公平 | 令牌丢失影响系统,进程变化需重构环 | 资源访问频繁,系统规模较小 | 低 | 中(需要令牌恢复机制) |
在实际应用中,分布式锁(如 Zookeeper、Redis 分布式锁)通常结合了这些算法的思想,以提高系统的性能和可靠性。选择合适的互斥方案,可以有效提升分布式系统的稳定性和数据一致性。
参考:
《分布式原理与实践-崔皓》
相关文章:
【分布式理论9】分布式协同:分布式系统进程互斥与互斥算法
文章目录 一、互斥问题及分布式系统的特性二、分布式互斥算法1. 集中互斥算法调用流程优缺点 2. 基于许可的互斥算法(Lamport 算法)调用流程优缺点 3. 令牌环互斥算法调用流程优缺点 三、三种算法对比 在分布式系统中,多个应用服务可能会同时…...
木材表面缺陷检测数据集,支持YOLO+COCO JSON+PASICAL VOC XML+DARKNET格式标注信息,平均正确识别率95.0%
数据集说明 木材表面缺陷检测数据集是用于训练和验证人工智能算法,以帮助自动识别和检测木材表面的缺陷,如裂纹、疤痕、孔洞等。这对于木材行业非常重要,可以提高生产过程的效率和质量控制水平。 本文提供的木材表面缺陷检测数据集࿰…...
Leetcodehot 力扣热题100 二叉搜索树中第 K 小的元素
class Solution { public:int res; // 用于存储第 k 小的元素int kthSmallest(TreeNode* root, int k) {inorder(root, k); // 进行中序遍历并找到第 k 小的元素return res; // 返回结果}private:// 中序遍历:遍历树的左子树、根节点和右子树void inorder(TreeNod…...
Awtk 如何添加开机画面
场景 我们知道在工程中,Ui是一个线程,并且需要一直存在,当我们使用的开机画面在这个线程开启就直接展示的时候,因为awtk的界面是window_open入栈的,即首次打开的窗口会记录在top,往后的窗口会依次往后存放&…...
关于多语言商城系统的开发流程
建设多语言商城系统是现在很多传统外贸企业的选择,外贸企业通过多语言电商系统开展海外业务,那么多语言商城系统的开发流程是怎么样的呢?接下来就跟着小来一起来看看吧。 1、页面UI设计 多语言商城系统的原型图经过反复推敲修正后࿰…...
IDEA中常见问题汇总
🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…...
计算机视觉-拟合
一、拟合 拟合的作用主要是给物体有一个更好的描述 根据任务选择对应的方法(最小二乘,全最小二乘,鲁棒最小二乘,RANSAC) 边缘提取只能告诉边,但是给不出来数学描述(应该告诉这个点线是谁的&a…...
CSS 实现下拉菜单效果实例解析
1. 引言 在 Web 开发过程中,下拉菜单是一种常见且十分实用的交互组件。很多前端教程都提供过简单的下拉菜单示例,本文将以一个简洁的实例为出发点,从 HTML 结构、CSS 样式以及整体交互逻辑三个层面进行详细解析,帮助大家理解纯 C…...
DeepSeek模拟阿里面试——Mysql
1.数据库基础知识 关系型数据库是什么? 关系型数据库是基于关系模型的数据库,使用表格来存储数据,表格之间可以通过键建立关系。 数据库的ACID特性是什么? 原子性(Atomicity):事务要么全部完成…...
MVVM设计模式
MVVM(Model-View-ViewModel)是一种软件设计模式,MVVM模式由三个主要部分组成: Model(模型):负责管理应用程序的业务逻辑和数据。它不关心UI如何展示数据,主要负责与服务器通信和数据处处…...
解决:Cannot find a valid baseurl for repo: base/7/x86_64
传送门 repo_file/etc/yum.repos.d/CentOS-Base.repo cp ${repo_file} ~/CentOS-Base.repo.backup sudo sed -i s/#baseurl/baseurl/ ${repo_file} sudo sed -i s/mirrorlist.centos.org/vault.centos.org/ ${repo_file} sudo sed -i s/mirror.centos.org/vault.centos.org/ $…...
ffmpeg -codecs
1. ffmpeg -codecs -loglevel quiet 显示ffmpeg支持的编解码器 2. 输出 选取部分结果: Codecs: D..... Decoding supported .E.... Encoding supported ..V... Video codec ..A... Audio codec ..S... Subtitle codec ...I.. Intra frame-only code…...
社区版IDEA中配置TomCat(详细版)
文章目录 1、下载Smart TomCat2、配置TomCat3、运行代码 1、下载Smart TomCat 由于小编的是社区版,没有自带的tomcat server,所以在设置的插件里面搜索,安装第一个(注意:安装时一定要关闭外网,小编因为这个…...
强化学习 DPO 算法:基于人类偏好,颠覆 PPO 传统策略
目录 一、引言二、强化学习基础回顾(一)策略(二)价值函数 三、近端策略优化(PPO)算法(一)算法原理(二)PPO 目标函数(三)代码示例&…...
长安链支撑全国不动产登记数据可信流通
转自人民日报客户端 不动产登记事关亿万企业、家庭的切身利益。促进不动产登记数据安全流通、业务高效协同,是各方持续努力的目标。记者1月7日从国家区块链技术创新中心获悉,我国自主可控、性能领先的区块链软硬件技术体系长安链,支撑自然资…...
GitCode 助力 Dora SSR:开启游戏开发新征程
项目仓库(点击阅读原文链接可直达) https://gitcode.com/ippclub/Dora-SSR 跨越技术藩篱,构建游戏开发乐园 Dora SSR 是一款致力于打破游戏开发技术壁垒的开源游戏引擎。其诞生源于开发者对简化跨平台游戏开发环境搭建的强烈渴望࿰…...
获取 Windows 视频时长的正确方式——Windows Shell API 深度解析
在 Qt 开发中,有时需要获取视频文件的时长,最直接的方法是在 Windows 上使用 Windows Shell API。然而,这涉及到 IShellItem、IPropertyStore 等 COM 组件,并需要正确处理 PKEY_Media_Duration。本篇文章将详细解析 Windows Shell API 获取视频时长的正确实现方式,并解决常…...
Linux系统安装Nginx详解(适用于CentOS 7)
目录 1. 更新系统包 2. 安装EPEL仓库 3. 安装Nginx 4. 启动Nginx服务 5. 设置Nginx开机自启 6. 检查Nginx状态 7. 配置防火墙 8. 访问Nginx默认页面 9. 配置Nginx(可选) 10. 重启Nginx 解决步骤 1. 检查系统版本 2. 移除错误的 Nginx 仓库 …...
深入理解Java对接DeepSeek
其实,整个对接过程很简单,就四步,获取key,找到接口文档,接口测试,代码对接。 1.获取 KEY https://platform.deepseek.com/transactions 直接付款就是了(现在官网暂停充值2025年2月7日…...
flutter isolate到底是啥
在 Flutter 中,Isolate 是一种实现多线程编程的机制,下面从概念、工作原理、使用场景、使用示例几个方面详细介绍: 概念 在 Dart 语言(Flutter 开发使用的编程语言)里,每个 Dart 程序至少运行在一个 Isol…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...
2025-05-08-deepseek本地化部署
title: 2025-05-08-deepseek 本地化部署 tags: 深度学习 程序开发 2025-05-08-deepseek 本地化部署 参考博客 本地部署 DeepSeek:小白也能轻松搞定! 如何给本地部署的 DeepSeek 投喂数据,让他更懂你 [实验目的]:理解系统架构与原…...
