论文-分布式-并发控制-并发控制问题的解决方案

这篇具有很好参考价值的文章主要介绍了论文-分布式-并发控制-并发控制问题的解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

参考文献

问题

解法与证明

易读版本


  • 参考文献

  • Dijkstra于1965年发表文章Solution of a Problem in Concurrent Programming Control,引出并发系统下的互斥(mutual exclusion)问题,自此开辟了分布式计算领域
  • Dijkstra在文中给出了基于共享存储原子性访问的解决方案只有十多行代码,但阅读起来较难以理解
  • 在查阅若干资料后,总结了一种较为直观的解释方法
  • 问题

  • 考虑N个节点(进程),每个都在运行一个无限循环的程序
  • 每轮循环当中都存在一个临界区(critical section)
  • 我们需要设计算法控制多个计算机中,同时只有一台可以进入其临界区,并需要满足下列条件:
    • 1-所有的节点是对称(symmetrical)的,即我们不能引入类似于“1号节点优先于2号节点”的静态优先级配置
    • 2-各个节点的运行速度可能不同,同一个节点在不同时刻的运行速度也可能不同
    • 3-任意节点在临界区外停止运行,不应引起系统的死锁
    • 4-如果多个节点想要访问临界区,必须在有限时间内决策出哪个节点优先访问
  • 各个节点之间可以通过共享存储(common store)通信,共享存储提供以字(word)为单位的原子性读写

    论文-分布式-并发控制-并发控制问题的解决方案,论文-分布式,分布式,java,后端,论文笔记

  • 当今现在,在基于共享内存通信的单机多进程上,我们可以很方便的使用基于TAS(Test&Set)或CAS(Copy&Swap)实现的互斥锁mutex来实现临界区互斥访问
  • 然而,在只有对内存单元原子读写的条件下,如何完成互斥访问呢?
  • Dijkstra给出了他的解法
  • 解法与证明

  • 在共享存储上,Dijkstra使用了两个长度为N的布尔数组,和一个整数:

    论文-分布式-并发控制-并发控制问题的解决方案,论文-分布式,分布式,java,后端,论文笔记

  • 其中,k 满足 1⩽k⩽N,b[i] 和 c[i] 只被节点 i 修改,且初始值为true
  • 对于第 i 个节点(1⩽i⩽N),执行下面的代码:

    论文-分布式-并发控制-并发控制问题的解决方案,论文-分布式,分布式,java,后端,论文笔记

  • Dijkstra原文中给出的证明集中论证两点:
    • 第一,所有节点互斥访问临界区
    • 第二,不会出现系统死锁
    • 建议大家可以先结合代码看下原文中证明
  • 易读版本

  • 在此,为了便于理解,对原代码做了如下修改:
    • 修改为c语言版本
    • 将数组和节点下标修改为通用的 0,1,…,N−1
    • 将数组 b 改名为 want_to_enter_critical_section(希望进入临界区),数组 c 改名为 in_critical_section(在临界区)
    • 将 b 和 c 数组的初始值改为 false ,并翻转代码中所有的布尔值,即 false 改为 true,true 改为 false

      论文-分布式-并发控制-并发控制问题的解决方案,论文-分布式,分布式,java,后端,论文笔记文章来源地址https://www.toymoban.com/news/detail-717819.html

  • 证明:
    • 1. mutual exclusion(互斥)
      • 如果程序想运行到critical section,则必须运行通过 Li4 中的代码且不返回 Li1
      • 即,除了自身的 in_critical_section[i] 为 true 外,其余所有节点的 in_critical_section[i] 均为 false
    • 2. non-blocking(非阻塞)
      • 如果第 k 个节点不在 Li0~Li4 的循环中,则 want_to_enter_critical_section 为 false
      • 所有在循环中的节点会在 Li1 判定 (k != i),其中的一个或多个节点会执行到 Li3 ,其中某个节点将设定 k = i
      • 此后 want_to_enter_critical_section[k] 为 true,其他节点无法再更改 k ,直至离开critical section后将 want_to_enter_critical_section[k] 为 false
      • 在 k 被确定后,第k个节点会不断尝试 Li4 中的代码,直至其余所有的 in_critical_section[i] 全部为 false
      • 这种情况必然会发生,不论临界区中的节点离开临界区,还是临界区外的发现 Li1: k != i,都会执行 in_critical_section[i] = false;
    • 证毕
  • 并发情况
    • 这里Dijstra原文中没有明确指出的是,考虑并发情况下两个节点 x 和 y 同时运行 Li4 中代码,则会出现下面的情况
    • 此种情况下,两个节点都 goto Li1
    • x 和 y 中不等于 k 的节点会执行 Li2,从而使得节点 k 在下次执行 Li4 时成功通过,进入临界区

到了这里,关于论文-分布式-并发控制-并发控制问题的解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 精确掌控并发:固定时间窗口算法在分布式环境下并发流量控制的设计与实现

    这是《百图解码支付系统设计与实现》专栏系列文章中的第(14)篇。点击上方关注,深入了解支付系统的方方面面。 本篇主要介绍分布式场景下常用的并发流量控制方案,包括固定时间窗口、滑动时间窗口、漏桶、令牌桶、分布式消息中间件等,并重点讲清楚固定时间窗口

    2024年01月19日
    浏览(58)
  • 高并发缓存问题分析以及分布式锁的实现

    在高并发的环境下,比如淘宝,京东不定时的促销活动,大量的用户访问会导致数据库的性能下降,进而有可能数据库宕机从而不能产生正常的服务,一般一个系统最大的性能瓶颈,就是数据库的io操作,如果发生大量的io那么他的问题也会随之而来。从数据库入手也是调优性价比最高

    2024年01月19日
    浏览(71)
  • 爬虫入门指南(5): 分布式爬虫与并发控制 【提高爬取效率与请求合理性控制的实现方法】

    在进行爬虫任务时,我们常常会面临两个重要问题:如何提高爬取效率以及如何合理控制请求的并发量,以避免对目标网站造成过大的压力。针对这些问题,本文将介绍分布式爬虫与并发控制的相关知识点,并演示使用Scrapy框架实现分布式爬虫,并对并发控制进行限制请求频

    2024年02月12日
    浏览(77)
  • 基于Mongodb分布式锁简单实现,解决定时任务并发执行问题

    我们日常开发过程,会有一些定时任务的代码来统计一些系统运行数据,但是我们应用有需要部署多个实例,传统的通过配置文件来控制定时任务是否启动又太过繁琐,而且还经常出错,导致一些异常数据的产生 网上有很多分布式锁的实现方案,基于redis、zk、等有很多,但

    2023年04月18日
    浏览(40)
  • Redis实现分布式锁之----超时和失效(非原子性)问题----解决方案

    Redis实现分布式锁之----超时和失效(非原子性)问题----解决方案 超时和失效(非原子性)问题 原子性问题 :上锁时存入线程名称,删除时要先判断锁内的名称是不是自己的,是再删除,但是后面的判断 和删除非原子性 ,会有并发安全问题。 不可重入问题 :一个线程只能

    2024年02月07日
    浏览(42)
  • 【项目亮点】大厂中分布式事务的最佳实践 问题产生->难点与权衡(偏爱Saga)->解决方案

    不断有同学问我大厂中实践分布式事务的问题,这里从 分布式事务的产生 ,到 强弱一致性与性能的权衡 ,再到最终 落地的解决方案 ,再到 实际的代码实现 ,再到我工作中实际 使用SAGA模式的应用案例 ,一篇文章讲清楚. 83.7%分布式事务的产生都是因为拆分微服务导致 的: 一句话概

    2024年04月27日
    浏览(47)
  • 【hadoop】centos7.6+hadoop3.1.1搭建分布式hadoop环境——包含各类问题解决方案

    本文针对centos7.4即以上版本的hadoop环境搭建,因为这部分搭建是个很复杂且很容易出错的内容,所以在结合了多种搭建方案后给出最适宜当前版本的搭建。 本教程适用于CentOS 7.4即以上版本,如果是Ubuntu等其它linux内核版本则不适合。 查看系统版本: 软件 版本 获取方法 Ope

    2024年02月16日
    浏览(44)
  • 分布式调用与高并发处理 Zookeeper分布式协调服务

    单机架构 一个系统业务量很小的时候所有的代码都放在一个项目中就好了,然后这个项目部署在一台服务器上,整个项目所有的服务都由这台服务器提供。 缺点: 服务性能存在瓶颈,用户增长的时候性能下降等。 不可伸缩性 代码量庞大,系统臃肿,牵一发动全身 单点故障

    2024年02月12日
    浏览(64)
  • Redis高并发分布式锁

    针对单机环境下的并发访问,可以通过锁机制(Syschronized或独占锁等)来进行控制,使得一个资源在一段时间内只能被一个线程访问;但在多服务器的分布式环境下,并发访问同一个资源,可能会导致被同时修改或更新,原因在于juc包下的并发控制机制,都是基于JVM层面的,而

    2024年02月02日
    浏览(82)
  • 服务端⾼并发分布式结构演进之路

    应⽤(Application)/系统(System) 为了完成一整套服务的一个程序或相互配合的程序群 模块(Module)/组件(Component) 当应⽤较复杂时,为了分离职责,将其中具有清晰职责的、内聚性强的部分,抽象出概念,便于理解 分布式(Distributed) 分布式(Distributed)是指将计算、任务

    2024年02月13日
    浏览(95)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包