分布式锁实现极速飞艇源码定制原理

1 自旋锁

   自旋锁如果已经被别的线程获取,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,”自旋”一词就是因此而得名。自旋锁是一种非阻塞锁,也就是说,如果某线程需要获取自旋锁,但该锁已经被其他线程占用时,该线程不会被挂起,而是在不断的消耗CPU的时间,不停的试图获取自旋锁。

2 互斥锁 (Mutex Lock)
互斥锁是阻塞锁,也是我们最常用的一种锁,当某线程无法获取互斥锁时,该线程会被直接挂起,不再消耗CPU时间,当其他线程释放互斥锁后,操作系统会唤醒那个被挂起的线程。阻塞锁可以说是让线程进入阻塞状态进行等待,当获得相应的信号(唤醒,时间)时,才可以进入线程的准备就绪状态,准备就绪状态的所有线程,通过竞争进入运行状态。它的优势在于,阻塞的线程不会占用 CPU 时间, 不会导致 CPU 占用率过高,但进入时间以及恢复时间都要比自旋锁略慢。在竞争激烈的情况下阻塞锁的性能要明显高于自旋锁。
分布式锁实现原理极速飞艇源码定制,需要请搜索【大神源码论坛】dsluntan.com 客服企娥3393756370 V信17061863513,
上面两种锁适用于不同场景:如果是多核处理器,预计线程等待锁的时间很短,短到比线程两次上下文切换时间要少的情况下,使用自旋锁是划算的。如果是多核处理器,如果预计线程等待锁的时间较长,至少比两次线程上下文切换的时间要长,建议使用互斥锁。如果是单核处理器,一般建议不要使用自旋锁。因为,在同一时间只有一个线程是处在运行状态,那如果运行线程发现无法获取锁,只能等待解锁,但因为自身不挂起,所以那个获取到锁的线程没有办法进入运行状态,只能等到运行线程把操作系统分给它的时间片用完,才能有机会被调度。这种情况下使用自旋锁的代价很高。如果加锁的代码经常被调用,但竞争情况很少发生时,应该优先考虑使用自旋锁,自旋锁的开销比较小,互斥量的开销较大。

3 可重入锁 (Reentrant Lock)
可重入锁是一种特殊的互斥锁,它可以被同一个线程多次获取,而不会产生死锁。首先它是互斥锁:任意时刻,只有一个线程锁。即假设A线程已经获取了锁,在A线程释放这个锁之前,B线程是无法获取到这个锁的,B要获取这个锁就会进入阻塞状态。其次,它可以被同一个线程多次持有。即,假设A线程已经获取了这个锁,如果A线程在释放锁之前又一次请求获取这个锁,那么是能够获取成功的。

原文地址:http://blog.51cto.com/13970116/2175196

时间: 2024-08-10 23:17:41

分布式锁实现极速飞艇源码定制原理的相关文章

数据库极速飞艇源码出售之分库分表-垂直

一.数据库瓶颈 不管是IO瓶颈还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值.在业务Service来看就是,可用数据库连接少甚至无连接可用.接下来就可以想象了吧(并发量.吞吐量.崩溃). IO瓶颈第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询时会产生大量的随机IO,降低查询速度 -> 分库和垂直分表. 第二种:网络IO瓶颈,请求的数据太多,网络带宽不够 -> 分库. CPU瓶颈第一种极速飞艇源码出售Q3266397597[da

部署OA极速飞艇源码下载SaltStack及批量安装httpd服务

SaltStack简介Salt OA极速飞艇源码下载Q2947702644是一个基础平台管理工具.SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信.master监听4505和4506端口,4505为master和minion认证通信端口,4506为master用来发送命令或者接收minion的命令执行返回信息.? SaltStack常用模块SaltStack提供了非常多的功能

PHP+MySQL数据库编程与极速飞艇源码出售步骤

第一步:PHP连接MySQL服务器第二步:极速飞艇源码出售[企鹅21717-93408]第三步:设置请求或返回的数据的字符集第四步:执行各种SQL语句.PHP连接MySQL服务器1.mysql_connect()描述:PHP连接MySQL服务器.语法: resource $link = mysql_connect($hostname,$username,$password)//$hostname:是MySQL服务器的域名或IP地址.也可以加端口号(3306).如:localhost:3306//

基于Redis实现分布式锁-Redisson使用及源码分析

在分布式场景下,有很多种情况都需要实现最终一致性.在设计远程上下文的领域事件的时候,为了保证最终一致性,在通过领域事件进行通讯的方式中,可以共享存储(领域模型和消息的持久化数据源),或者做全局XA事务(两阶段提交,数据源可分开),也可以借助消息中间件(消费者处理需要能幂等).通过Observer模式来发布领域事件可以提供很好的高并发性能,并且事件存储也能追溯更小粒度的事件数据,使各个应用系统拥有更好的自治性. 本文主要探讨另外一种实现分布式最终一致性的解决方案--采用分布式锁.基于分布式锁的解决

UX术语幸运飞艇源码下载详解:任务流,用户流,流程图以及其它全新术语

用户幸运飞艇源码下载[大神源码论坛]dsluntan.com  [布丁源码论坛]budingbbs.com 企娥3393756370 体验拥有一长串专业的术语和可交付内容.当在线查看UX相关职位描述时,所罗列的这类术语更是全面繁多.而且,随着时间的流逝和它们自身的不断演变,其中很大一部分甚至出现了定义上的重复和交叠.所以,为方便设计师,Web/app开发者以及用户等更加简单的理解这些术语和可交付内容,我认为是时候该重新整理和定义它们了. 打破它 任务流和用户流是多年来常听到的用户体验术语.虽然我

漫谈可视化Prefuse(六)---改动源码定制边粗细

可视化一路走来,体会很多:博客一路写来,收获颇丰:代码一路码来,思路越来越清晰.终究还是明白了一句古话:纸上得来终觉浅,绝知此事要躬行. 跌跌撞撞整合了个可视化小tool,零零碎碎结交了众多的志同道合之人,迷迷糊糊创建了我"可视化/Prefuse"的QQ群,详情可查看左侧的公告部分.此群旨在结实更多的可视化领域的同仁,也希望可以成为一个开源项目分享与阅读的平台.源于开源,开源为我们提供了助我们快速成长的养分,开源的每一行代码都是前辈们心血的结晶,开源是智慧的浓缩. 在博客园写博客也是如

Spark源码定制第一课:通过案例对SparkStreaming透彻理解三板斧之一

第一课:通过案例对SparkStreaming透彻理解三板斧之一:解密SparkStreaming另类实验及SparkStreaming本质解析 本期导读: 1 Spark源码定制选择从SparkStreaming入手: 2 Spark Streaming另类在线实验: 3 瞬间理解SparkStreaming本质. 1.    从Spark Streaming入手开始Spark源码版本定制之路 1.1           从Spark Streaming入手Spark源码版本定制之路的理由 从

【出售源码+定制】酷派定制:选出你心中的MAX

这个H5是为CoolPad MAX手机发布前宣传所用,完全定制开发,应用了大量的动态效果,历时一周的时间打磨上线,堪称是精品之作! 此源码现出售+定制,需要演示效果请联系涛舅舅! [出售源码+定制]酷派定制:选出你心中的MAX

颐和果园微商模式源码定制开发

<p class="p" style="margin-left:0.0000pt;text-indent:0.0000pt;background:#FFFFFF;"> 颐和果园模式系统不容小觑, <span style="white-space:normal;">颐和果园模式系统</span>超级给力,颐和果园<span>软件平台模式</span>可以说是当下的潮流和趋势因为每个人都要吃