锁的基础知识 锁的类型 锁从宏观上分类,只分为两种:悲观锁与乐观锁。 乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上 ...
分类:
编程语言 时间:
2019-09-25 00:55:23
阅读次数:
87
一直以为很了解sqlserver的加锁过程,在分析一些特殊情况下的死锁之后,尤其是并发单表操作发生的死锁,对于加解锁的过程,有了一些重新的认识,之前的知识还是有一些盲区在里面的。delete加锁与解锁步骤是怎么样的?什么时候对那些对象,加什么类型的琐,加锁与索引的关系是怎么样的,什么时候释放锁?整个 ...
分类:
数据库 时间:
2019-09-24 21:20:34
阅读次数:
122
原理 master-workers的机制的好处 首先,对于每个worker进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查找时,也会方便很多。其次,采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master 进程则很快启动新的w ...
分类:
其他好文 时间:
2019-09-24 17:46:04
阅读次数:
84
一、两种并发模型 多线程共享内存,以共享内存的方式来通信。比如java在访问共享数据的时候,通过加锁来实现,java.util.concurrent包。 CSP(communicating sequential processes)并发模型,以通信的方式来共享内存。Go的CSP并发模型是通过goro ...
分类:
编程语言 时间:
2019-09-24 10:38:58
阅读次数:
72
一、互斥锁 进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理。 注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行的修改,没错,速度是慢了,牺牲了速度而保证了数据安全。 1.上厕所的小例子:你上厕所的时候肯定得锁门... ...
分类:
编程语言 时间:
2019-09-23 22:31:32
阅读次数:
122
今天看到一篇文章,很详细的描述了锁和锁粒度的概念,如下 为什么要加锁?加锁是为了防止不同的线程访问同一共享资源造成混乱。打个比方:人是不同的线程,卫生间是共享资源你在上洗手间的时候肯定要把门锁上吧,这就是加锁,只要你在里面,这个卫生间就被锁了,只有你出来之后别人才能用。想象一下如果卫生间的门没有锁会 ...
分类:
其他好文 时间:
2019-09-23 13:38:26
阅读次数:
119
一、同步锁 1.1 多个线程抢占资源的情况 1.2 对公共数据进行锁操作 1.3 同步锁的引用 既然加锁会让运行变成串行,那么我在start之后立即使用join,就不用加锁了啊,也是串行的效果啊 没错:在start之后立刻使用jion,肯定会将100个任务的执行变成串行,毫无疑问,最终n的结果也肯定 ...
分类:
编程语言 时间:
2019-09-22 21:44:48
阅读次数:
112
一、协程的优势 1、极高的执行效率。没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。 2、不需要多线程的锁机制。因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。 因为协程是一个线程执行,利用多核CPU最简单 ...
分类:
编程语言 时间:
2019-09-22 21:41:25
阅读次数:
125
博客: https://blog.csdn.net/tongdanping/article/details/79878302#%E4%B8%89%E3%80%81%E7%B4%A2%E5%BC%95%E7%9A%84%E5%88%86%E7%B1%BB https://blog.csdn.net/u ...
分类:
数据库 时间:
2019-09-22 19:58:14
阅读次数:
98