RabbitMQ分布式部署有3种方式:集群、Federation和Shovel。这三种方式并不是互斥的,可以根据需求选择相互组合来达到目的,后两者都是以插件的形式进行设计,复杂性相对高,此篇只聊一下RabbitMQ自带的内建集群。 ? 我们把部署RabbitMQ的机器称为节点,也就是broker。b ...
分类:
其他好文 时间:
2020-06-21 00:32:47
阅读次数:
96
所谓lock-free和wait-free算法是指对于共享的数据并非对其加锁来控制访问,而是多个线程并行的访问。通过该算法可以达到对共享对象并发的读写而不会破坏对象本身。所谓lock-free是指对于线程不加锁,让系统执行所有的步骤。lock-free提到的不加锁是指不使用类似于互斥锁或者信号量之类 ...
分类:
其他好文 时间:
2020-06-19 14:21:43
阅读次数:
61
###什么是2-SAT 2-sat问题是一个逻辑互斥问题,与我们小时候做过的一道数学题一样。 A,B,C三个人中有两个女生,其中如果A为女生,B一定不是女生,而且A与C性别相同,求A,B,C的性别。 这是一道非常简单的题目,我们可以简单分析一下。 我们用$f[i]=0$表示$i$为女生,$f[i]= ...
分类:
其他好文 时间:
2020-06-18 01:38:52
阅读次数:
45
转自:https://woodenrobot.me/2020/03/09/redis-lock/ 业界常用解决方案 基于 MySql 等数据库的唯一索引 基于 ZooKeeper 临时有序节点 基于 Redis 的 NX EX 参数 本文主要讲解基于 Redis 实现的分布式锁 分布式锁的特点 互斥 ...
分类:
编程语言 时间:
2020-06-17 18:31:52
阅读次数:
56
MySQL有哪些行锁,是如何解决幻读的? 行锁根据互斥的纬度可以分为: 1、共享锁:当读取当一行记录时为了防止别人修改则需要添加S锁。 2、排他锁:当修改一行记录时为了防止别人同时进行修改则需要添加X锁。 根据锁定的范围可以分为: 1、间隙锁:间隙锁锁定范围是索引记录之间的间隙或者第一个或最后一个索 ...
分类:
数据库 时间:
2020-06-16 18:29:30
阅读次数:
92
死锁: 是指两个或者两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,他们都将无法推进下去 产生死锁的原因: 互相争夺共享资源 产生死锁的必要条件: 互斥条件:共享资源被一个线程占用 请求与保持条件(占有且等待):一个进程因请求资源而阻塞时,对已获得的资源保持 ...
分类:
编程语言 时间:
2020-06-16 00:59:12
阅读次数:
93
为了避免多个线程对同一个数据进行读写,我们要将各个线程进行同步。所谓同步,就是指在一个线程访问数据未结束的时候,其他线程不得对同一数据进行访问。 同步最常用的方法是锁。 二元信号量 binary semaphore 是最简单的一种锁,只有两种状态:占用和非占用。她适合只能被唯一一个线程独占访问的资源 ...
分类:
编程语言 时间:
2020-06-14 10:28:03
阅读次数:
57
一.死锁,互斥锁,递归锁 死锁:只上锁不解锁容易造成死锁现象 互斥锁:加一把锁就对应解一把锁,形成互斥锁 递归锁:用于解决死锁,只是一种应急的处理方法 from threading import RLock 从语法上讲,锁可以互相嵌套,但不要使用 不要因为逻辑问题让上锁分成两次,导致死锁 二.线程队 ...
分类:
编程语言 时间:
2020-06-13 23:44:08
阅读次数:
96
偏向锁: 会延迟开启,性能比轻量级锁好,没有其它线程会拿到此锁的对象。偏向锁与hasCode是互斥的。 轻量级锁: 没有其它线程去竞争此锁对对象,其它线程可以交替执行。 重量级锁: 有其它线程会去竞争拿到此锁对象,当调用wait()方法时,直接膨胀成重量级锁。 ...
分类:
其他好文 时间:
2020-06-13 19:00:18
阅读次数:
56
互斥锁(互斥量) 创建互斥锁 pthread_mutex_t mutex; 初始化互斥锁 pthread_mutex_init(pthread_mutex_t* mutex, const pthread_mutexattr_t* attr); 销毁互斥锁 pthread_mutex_unlock(p ...
分类:
编程语言 时间:
2020-06-13 00:08:25
阅读次数:
67